勇哥注:
game4automatic的Lamp灯,居然不在播放的时候,也会有一闪一闪的效果。
显示,它在编辑器的状态也在执行中。这是怎么做到的?
在Unity中,有几种方法可以让脚本在未播放场景时运行:
(1)使用ExecuteInEditMode属性:
在脚本的类定义前添加[ExecuteInEditMode]属性,可以使脚本在Unity编辑器中运行,而不需要播放场景。
例如:
using UnityEngine; [ExecuteInEditMode] public class Test : MonoBehaviour { private void OnDisable() { Debug.Log("Test PrintOnDisable: script was disabled"); } private void OnEnable() { Debug.Log("Test PrintOnEnable: script was enabled"); } }
当挂载这个脚本的物体取消激活状态时,脚本仍然会运行1。
(2)使用RuntimeInitializeOnLoadMethod属性:
在脚本的方法前添加[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]属性,
可以使该方法在程序运行时执行,而不需要挂载到任何游戏对象上。
例如:
using UnityEngine; public static class Initialization { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] public static void DoMethod() { GameObject go = GameObject.Find("GameObject/YYY"); Debug.Log("GO:" + go); Debug.Log("It's the start of the game"); } }
这样,该方法会在每次进入Play模式时运行,而不需要挂载到Unity场景中的对象。
详细可见unity的在线手册的介绍:
https://docs.unity3d.com/cn/2019.2/ScriptReference/ExecuteAlways.html

