Unity游戲引擎提供給開發者很多面板的自定義設置和配置,其中在c#腳本中引用一個特性[ExecuteInEditMode]就可以在游戲未運行的狀態下執行c#腳步,對於開發者來說,這很方便調試。當前看看該特性下 代碼在Start()和Update()函數中會的執行規律。
1.腳本如下(以下腳本均是在Unity 2020.1.0a12 (64-bit)編輯器下運行)
using UnityEngine; [ExecuteInEditMode] public class MyEditorScript : MonoBehaviour { void Start() { print("Start"); } void Update() { print("Update, time = " + Time.time); } }
2.將腳本拖拽到游戲體上,看看debug信息
Start()和Update()中只執行了一次。
3.我發現當我切換窗口然后再切回unity界面的時候,Update()執行了一次。
4.當我在場景中有任何修改的時候Update()也都執行了一次,其中包括重命名、創建物體、transform物體,enable/disable物體、保存修改等等均會發生。
5.有意思的是,當我disable腳本再enable腳本的時候,Start()並沒有執行,只有Update()執行了一次,我繼續在代碼中添加Awake()函數,看看disable/enable之后,Awake()會不會執行。
using UnityEngine; [ExecuteInEditMode] public class MyEditorScript : MonoBehaviour { private void Awake() { print("Awake"); } void Start() { print("Start"); } void Update() { print("Update, time = " + Time.time); } }
(重新拖拽到物體上的debug信息)
遺憾的是Awake()並沒有執行,Awake與Start()一樣只在腳本拖拽到物體的時候才執行。
可能還有很多系統函數可以測試,不過我現在只測試了幾個常用的系統函數,得出了以下總結。
總結:在編輯器模式下引用[ExecuteInEditMode]特性,Awake()、Start()、Update()在腳本首次拖拽到物體上的時候均執行一次,之后只有Update()在場景每次修改內容或者保存內容的時候執行一次。