unity3d編輯器模式下運行


  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()在場景每次修改內容或者保存內容的時候執行一次。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM