# #2 Unity與C#程式基本概念
###### tags: `程式教程` `Unity` `程式` `C#`
> 以下內容來自:[點這裡](https://www.youtube.com/watch?v=jL7PqYz4eB0&t=317s&ab_channel=%E7%99%BD%E7%B1%B3%E9%A3%AF)
## Unity與C#之間的關係
雖然主要學的是Unity,但其實還包含程式語言,有程式語言才能讓我們與遊戲的物件進行互動
---

藉由Unity去做基本的開發,不過我們還是需要結合C#程式語言跟邏輯才有辦法做出一個完整的遊戲
---
開發者主要使用C#控制內容

----
將素材導入Unity,再用C#控制,最後再輸出成遊戲或編輯遊戲執行的過程
---
上次大致學習了Unity基本觀念、介面、操作
先保留這些Unity基礎知識,回到程式語言的觀念學習
---
## C# 基礎程式語言觀念

於專案點右鍵->建立->C#腳本
----

這些是在Unity的基本C#腳本結構
----
C#以及基本的程式語言結構大致上是這樣子

----
左邊是我的打開一個空腳本時的樣貌
最外面為命名空間,用以區隔不同的程式,
不過這個東西我們在Unity應該會比較少用到,因此我們先帶過,若是有需要使用到會在進行一個詳細的說明的。
----
那我們最主要需要做的便是類別class,它包含了程式片段,所謂的程式片段就是像下面的各種"方法",一個類別可以有好幾種方法,在寫程式的時候可能會遇到重複使用的一個個程式片段,那麼我們便可以將其製作成一個一個"方法"
----
"方法"的順序並不會影響程式的執行,並不會發生方法2寫在方法1前面,方法2就比較早執行的情況,你可以依照你的習慣去編排你方法的順序,但是需要注意的是>>方法寫的陳述式,方法裡面的陳述式可以寫到很多,但是這個陳述式是具有順序的,方法本身不具有順序性但是陳述式是由上而下執行。
---
### Unity的C#腳本結構
----

----
C#的程式大致上就是這樣剛相講的:
New script是它的類別
一開始建腳本會有的start、Update就是它的方法
這是內建你只要一打開它就會幫你開起來這些腳本結構的樣子
----
要注意一下的是上面這部分
其實是引用這個在做開發Unity時,它裡面會有一些內建的程式(一些方法)
那你就必須要像這樣子,去引用它你才有辦法去使用。
----
關於引用的方法跟細節都會再跟各位做講解
這邊這三個是做一些特殊的用途,它這個特殊用途的跟我們講的這個命名空間有關
----
### C#的結構有起始跟結束的標記符號
----

----
不像我們一般打文章,只要有句號就可以了,它有一個起始跟結束
我們會用大掛號做為類別或是方法的標記(起始、結束標記)
以分號作為一個陳述式的標記
----

----
如果我們拿普通開起來的腳本啊
這邊這個分號就代表一般陳述式的結束
基本上每行陳述式最後結尾都要加上分號
----
如果你沒有加上分號,程式可能會有錯誤無法正常執行
打完類別的最後面
這邊就會有一個大掛號的起始
通常後面會對應大掛號的結束
----
類別包著很多各種不同的方法,像這邊的start方法就會一個起始大掛號跟結束大掛號,Update也相同。
----

----
依照你不同的習慣去調整大掛號的順序:
如要在哪一行,你可以去做調整,編排不會影響程式執行
----
但是盡可能還是要做一定的排版
別像最後面的,會難以閱讀,雖然像前面兩者都可以,你只要不把大掛號放錯位置或多了少了大掛號,這種基本錯誤不要犯之外
在編排上不要把那個排版弄成最後那樣,那樣會非常難閱讀。
----
雖然程式語言可以正常執行沒錯,可是盡可能編排合理一點,讓你自己、還有幫你看程式的老師、前輩或是後面的一些同學、你的朋友,讓他更容易閱讀然後維護比較容易一點。
----

----
目前還缺少一個東西還沒介紹:繼承
剛講了類別:NewScript,它前面會加一個class,public之後再進行介紹
類別
如果是方法,它這邊就會有一個void、名稱、一組小括號,最後再大括號
----
冒號的這個東西和冒號後面這個白家,這個是因為「繼承」概念是因為在寫腳本的時,有一些unity內建的方法,必須要用繼承的觀念去使用,就是說如start和Update都會用到繼承源的特別用法之類的。
如果把繼承拿掉就會導致錯誤,腳本可以執行但是它不會正常執行start跟update
未來會再透過實例講解什麼叫做繼承
---
## Unity基礎觀念
----
先在Camera物件內新增一個空的腳本

----
空腳本的建立方式,像圖中點擊Add Component要在這邊打一個腳本的名稱就可以了,就會新建一個腳本在Project的視窗底下
開好一個的空教本,用編輯器打開來,就會變成像這樣子的畫面。
可能說用不同編輯器,顯示的樣式不一樣,但大致上腳本就是長這個樣
----

----
新增腳本會預設兩個方法就是剛說過的Start跟Update
Start是腳本確定執行後它會執行一次,只有一次。
Update會在每個影格都執行一次
這個影格觀念我們都會再慢慢講解
那它就是會一直執行
----
除了這個Start跟Update,我們還要先跟各位講解
Unity有一個很基本的生命週期的概念
比如start跟Update只執行一次與每個影格都執行
這個就叫所謂的生命週期
----
它會依照unity內建,已經寫好的生命週期去做順序上的執行
也會依照後面開發者寫程式時邏輯上的順序來進行執行
大致上是長這樣子
----

----
Unity內建有這幾個方法,除了我們剛看到Start跟Update之外,還有awake
awake是場景一執行之後他就會執行的一個叫做awake的方法,那下面是腳本確定執行後才執行的Start
----
再後面會有Update跟lateUpdate,這兩個是會在遊戲進行不斷的執行,直到遊戲停止。
如果遊戲關掉,它就會執行一個很特殊的方法,就是OnApplicationQuit
如果腳本被摧毀,比如物件被刪除了,
遊戲雖然沒有停止但是你腳本和物件被刪除,就會執行最後那個:OnDestroy
----
Unity會時常使用到有一個陳述式
Debug.Log();
----
那是有一個類別就叫作Debug
他底下一個方法叫做Log
使用Debug.Log();這個方法時你要傳入文字才有辦法執行
----
認識Debug.Log();能做甚麼?
在一個視窗叫做Console傳入訊息
開啟的方式在上面選單列的Windows>Console
----
這邊要注意,實際使用時,請在小括弧中放入"文字"
請注意,文字要被" "包住。
----

---