iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
自我挑戰組

從零開始學習Unity引擎系列 第 7

unity學習day7--初見腳本

  • 分享至 

  • xImage
  •  

在第一天的時候提到過Unity只支持C#語言,但C#寫出來的是什麼?

現在建立兩個物件,一個球體,一個立方體。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373JkSWH6MKDU.png

這兩個物件有相同的性質,看到下面這張圖,比較兩個物件檢查器中的不同,似乎只有形狀不一樣,其他的部分都一模一樣,而檢查器當中的欄位也可以叫做功能,或者性質(每個腳本擁有的性質/功能)。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373dYAVXDdpIi.png

很顯然,這兩個腳本有很多一樣的功能,unity已經把常用的功能加在編輯器中了,如果我想要額外添加功能的話只需要在檢查器的最下面選擇“添加組件”就能添加新功能
https://ithelp.ithome.com.tw/upload/images/20250909/2017837367Qe3AWi6U.png

如果我想要的功能檢查器中沒有怎麼辦?那我就可以自己寫一個功能,我自己用C#寫出來的功能叫做“腳本”。不過該怎麼添加腳本呢?右鍵專案選擇“建立”,點擊“MonoBehaviour”建立一個C#腳本,並且命名為:Move。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373P2jh701bQf.png

現在Move是一個空腳本,因為我還沒編輯,這個空腳本可以當成組件添加到物件當中。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373VAfvEJZpVX.png


接下來即將進入漫長的Coding時間

一,生命週期方法

雙擊“Move”進入VScode,進入後看到兩個方法,“Update”和“Start”,這兩個方法屬於“生命週期方法”,生命週期方法是Unity 在特定時間點自動呼叫的函式,用來執行遊戲物件的初始化、更新、銷毀等邏輯。也就是說,這是Unity的底層邏輯,屬於不得不學的範疇。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373soI19ab0nf.png

仔細看上面那張圖,不難發現右邊有“GitHub Copilot”,有這麼方便的工具當然要好好利用,所以我讓它生成了所有的生命週期方法,接下來逐個講解。

  • void Awake():
    在遊戲物件 被載入(Instantiate)時最早執行的一個方法,它用來在程式開始前,初始化變數、設定參考 (References)或準備資源。

  • void OnEnable():
    當一個 遊戲物件或其腳本被啟用(Enabled)時,Unity 會自動呼叫這方法。

  • void Start():
    當遊戲物件啟用(enabled)並且場景開始執行後,Unity 會自動呼叫這個方法一次。它用來做「遊戲一開始時 的初始化工作」。
    https://ithelp.ithome.com.tw/upload/images/20250909/20178373qFnnhCY25m.png

  • void Update():
    每一幀(frame)都會自動執行一次,用來處理持續變化的邏輯,像是移動、輸入偵測、動畫更新等等。

  • void FixedUpdate():
    它會以固定的時間間隔被 Unity 引擎自動呼叫,與畫面更新(幀率)無關。

  • void LateUpdate():
    在每一幀的所有 Update() 執行之後自動被呼叫,常用於需要在其他物件更新完之後再做處理的邏輯,例如攝影 機跟隨。
    https://ithelp.ithome.com.tw/upload/images/20250909/20178373wFHDgGJiKq.png

  • void OnDisable():
    當一個遊戲物件或其腳本被停用(Disabled)時,Unity 會自動呼叫這個方法一次,通常與 OnEnable() 搭配 使用,負責在物件失效時進行收尾或暫停處理。

  • void OnDestroy():
    當一個遊戲物件或其掛載的腳本被銷毀(Destroy)時,Unity 會自動呼叫這個方法一次。通常用來執行「資源 釋放」、「清理記憶體」。
    https://ithelp.ithome.com.tw/upload/images/20250909/201783731cXY5zlBFD.png

二,腳本執行優先順序
在專案新建兩個腳本,一個叫“test1”,一個叫“test2”,並且在腳本裡的start方法寫各自的名稱,前面提過了,start在專案運行的時候執行,正好用來測試腳本執行的先後順序。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373td6VEOWTOg.png

之後先把test2加入“Cube”,再把test1加入“Cube”,然後點擊畫面正中間上方的播放來執行腳本,再到控制台查看結果。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373gC4kIteVXj.png

很顯然,腳本加入的順序並不能決定腳本執行的順序,但有的時候我們一定要優先執行某些腳本怎麼辦?這時候前面提到的Awake()就有作用了,把test2的內容寫到Awake()裡面就可以優先執行test2。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373NRG5oVF6U3.png

另外一種方法就是手動調整腳本執行順序,這裡先把test2的內容放回Strat()中,然後在“編輯”點擊“專案設置”,進去之後找到“腳本執行順序”添加test1和test2。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373BgHoMGXwKL.png

添加兩個腳本之後unity會自動賦予一個索引值,根據索引值大小決定執行順序,只要test2的索引值比test1小就能讓test2先執行。
https://ithelp.ithome.com.tw/upload/images/20250909/20178373cpcsiMiCpu.png


上一篇
Unity學習day6—資源導入、下載及應用
下一篇
unity學習day8—標籤、向量與複製
系列文
從零開始學習Unity引擎12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言