# #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,但其實還包含程式語言,有程式語言才能讓我們與遊戲的物件進行互動 --- ![](https://i.imgur.com/glihLBL.png) 藉由Unity去做基本的開發,不過我們還是需要結合C#程式語言跟邏輯才有辦法做出一個完整的遊戲 --- 開發者主要使用C#控制內容 ![](https://i.imgur.com/pZYFHnM.png) ---- 將素材導入Unity,再用C#控制,最後再輸出成遊戲或編輯遊戲執行的過程 --- 上次大致學習了Unity基本觀念、介面、操作 先保留這些Unity基礎知識,回到程式語言的觀念學習 --- ## C# 基礎程式語言觀念 ![](https://i.imgur.com/tMartYE.png) 於專案點右鍵->建立->C#腳本 ---- ![](https://i.imgur.com/PbetYwi.png) 這些是在Unity的基本C#腳本結構 ---- C#以及基本的程式語言結構大致上是這樣子 ![](https://i.imgur.com/4XUWUgw.png) ---- 左邊是我的打開一個空腳本時的樣貌 最外面為命名空間,用以區隔不同的程式, 不過這個東西我們在Unity應該會比較少用到,因此我們先帶過,若是有需要使用到會在進行一個詳細的說明的。 ---- 那我們最主要需要做的便是類別class,它包含了程式片段,所謂的程式片段就是像下面的各種"方法",一個類別可以有好幾種方法,在寫程式的時候可能會遇到重複使用的一個個程式片段,那麼我們便可以將其製作成一個一個"方法" ---- "方法"的順序並不會影響程式的執行,並不會發生方法2寫在方法1前面,方法2就比較早執行的情況,你可以依照你的習慣去編排你方法的順序,但是需要注意的是>>方法寫的陳述式,方法裡面的陳述式可以寫到很多,但是這個陳述式是具有順序的,方法本身不具有順序性但是陳述式是由上而下執行。 --- ### Unity的C#腳本結構 ---- ![](https://i.imgur.com/7rPxkI5.png) ---- C#的程式大致上就是這樣剛相講的: New script是它的類別 一開始建腳本會有的start、Update就是它的方法 這是內建你只要一打開它就會幫你開起來這些腳本結構的樣子 ---- 要注意一下的是上面這部分 其實是引用這個在做開發Unity時,它裡面會有一些內建的程式(一些方法) 那你就必須要像這樣子,去引用它你才有辦法去使用。 ---- 關於引用的方法跟細節都會再跟各位做講解 這邊這三個是做一些特殊的用途,它這個特殊用途的跟我們講的這個命名空間有關 ---- ### C#的結構有起始跟結束的標記符號 ---- ![](https://i.imgur.com/XebZJtV.png) ---- 不像我們一般打文章,只要有句號就可以了,它有一個起始跟結束 我們會用大掛號做為類別或是方法的標記(起始、結束標記) 以分號作為一個陳述式的標記 ---- ![](https://i.imgur.com/hzpB8gt.png) ---- 如果我們拿普通開起來的腳本啊 這邊這個分號就代表一般陳述式的結束 基本上每行陳述式最後結尾都要加上分號 ---- 如果你沒有加上分號,程式可能會有錯誤無法正常執行 打完類別的最後面 這邊就會有一個大掛號的起始 通常後面會對應大掛號的結束 ---- 類別包著很多各種不同的方法,像這邊的start方法就會一個起始大掛號跟結束大掛號,Update也相同。 ---- ![](https://i.imgur.com/U8EGH2E.png) ---- 依照你不同的習慣去調整大掛號的順序: 如要在哪一行,你可以去做調整,編排不會影響程式執行 ---- 但是盡可能還是要做一定的排版 別像最後面的,會難以閱讀,雖然像前面兩者都可以,你只要不把大掛號放錯位置或多了少了大掛號,這種基本錯誤不要犯之外 在編排上不要把那個排版弄成最後那樣,那樣會非常難閱讀。 ---- 雖然程式語言可以正常執行沒錯,可是盡可能編排合理一點,讓你自己、還有幫你看程式的老師、前輩或是後面的一些同學、你的朋友,讓他更容易閱讀然後維護比較容易一點。 ---- ![](https://i.imgur.com/74w4WoG.png) ---- 目前還缺少一個東西還沒介紹:繼承 剛講了類別:NewScript,它前面會加一個class,public之後再進行介紹 類別 如果是方法,它這邊就會有一個void、名稱、一組小括號,最後再大括號 ---- 冒號的這個東西和冒號後面這個白家,這個是因為「繼承」概念是因為在寫腳本的時,有一些unity內建的方法,必須要用繼承的觀念去使用,就是說如start和Update都會用到繼承源的特別用法之類的。 如果把繼承拿掉就會導致錯誤,腳本可以執行但是它不會正常執行start跟update 未來會再透過實例講解什麼叫做繼承 --- ## Unity基礎觀念 ---- 先在Camera物件內新增一個空的腳本 ![](https://i.imgur.com/mQKukwq.png) ---- 空腳本的建立方式,像圖中點擊Add Component要在這邊打一個腳本的名稱就可以了,就會新建一個腳本在Project的視窗底下 開好一個的空教本,用編輯器打開來,就會變成像這樣子的畫面。 可能說用不同編輯器,顯示的樣式不一樣,但大致上腳本就是長這個樣 ---- ![](https://i.imgur.com/G7fdrFw.png) ---- 新增腳本會預設兩個方法就是剛說過的Start跟Update Start是腳本確定執行後它會執行一次,只有一次。 Update會在每個影格都執行一次 這個影格觀念我們都會再慢慢講解 那它就是會一直執行 ---- 除了這個Start跟Update,我們還要先跟各位講解 Unity有一個很基本的生命週期的概念 比如start跟Update只執行一次與每個影格都執行 這個就叫所謂的生命週期 ---- 它會依照unity內建,已經寫好的生命週期去做順序上的執行 也會依照後面開發者寫程式時邏輯上的順序來進行執行 大致上是長這樣子 ---- ![](https://i.imgur.com/605r1hI.png) ---- Unity內建有這幾個方法,除了我們剛看到Start跟Update之外,還有awake awake是場景一執行之後他就會執行的一個叫做awake的方法,那下面是腳本確定執行後才執行的Start ---- 再後面會有Update跟lateUpdate,這兩個是會在遊戲進行不斷的執行,直到遊戲停止。 如果遊戲關掉,它就會執行一個很特殊的方法,就是OnApplicationQuit 如果腳本被摧毀,比如物件被刪除了, 遊戲雖然沒有停止但是你腳本和物件被刪除,就會執行最後那個:OnDestroy ---- Unity會時常使用到有一個陳述式 Debug.Log(); ---- 那是有一個類別就叫作Debug 他底下一個方法叫做Log 使用Debug.Log();這個方法時你要傳入文字才有辦法執行 ---- 認識Debug.Log();能做甚麼? 在一個視窗叫做Console傳入訊息 開啟的方式在上面選單列的Windows>Console ---- 這邊要注意,實際使用時,請在小括弧中放入"文字" 請注意,文字要被" "包住。 ---- ![](https://i.imgur.com/n3SD1z1.png) ---