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()在场景每次修改内容或者保存内容的时候执行一次。

你可能感兴趣的