当创建 ScriptableObject
的实例时调用。
Awake
在创建 ScriptableObject
的新实例时调用。发生这种情况的场景包括
ScriptableObject
作为资源ScriptableObject
ScriptableObject
ScriptableObject
资源的引用的场景,或者在后续加载时(如果原始实例已被 Resources.UnloadUnusedAssets 清理)ScriptableObject
资源,或者在后续选择时(如果原始实例已被 Resources.UnloadUnusedAssets 清理)
注意:在编辑模式下创建为资源的 ScriptableObjects 不会在进入播放模式时重新创建。要在进入播放模式时在 ScriptableObject
中执行初始化工作,请改用 ScriptableObject.OnEnable。
下面给出一个示例。此示例包含两个脚本。首先显示的是 ScriptableObject 脚本。它实现了与 MonoBehaviour 分开的代码。第二个是一个小的 MonoBehaviour 相关脚本,它访问 ScriptableObject 脚本中的值。
// A ScriptableObject example script. // The A and B members implement features which // are unrelated to MonoBehaviour.
using UnityEngine;
public class ScriptObj : ScriptableObject { int a = 10; int[] b = new int[5] {0, 17, 34, 42, 67};
public int A { get {return a; } }
// return value in b array, or -1 if x is out-of-range public int B(int x) { if (x >= 0 && x < 5) return b[x]; else return -1; }
public void Awake() { Debug.Log("Awake"); }
public void OnDestroy() { Debug.Log("OnDestroy"); } }
以下脚本使用了上述 ScriptableObject 脚本。
// create and access the ScriptObj
using UnityEngine;
public class ScriptObjExample : MonoBehaviour { ScriptObj test;
void Start() { test = (ScriptObj)ScriptableObject.CreateInstance(typeof(ScriptObj));
print(test.A); print(test.B(3)); print(test.B(-3)); } }