Awake 在加载脚本实例时调用。
Awake 用于在游戏启动前初始化任何变量或游戏状态。
在脚本实例的生命周期中,将只调用 Awake 一次。
Awake 在初始化所有对象后调用,以便您能够安全地与其他对象通信或使用 GameObject.FindWithTag 等查询其他对象。
每个 GameObject 的 Awake 在对象之间以随机顺序调用。因此,您应该使用 Awake 在脚本之间设置引用,并使用 Start 来回传递任何信息。
Awake 始终在任何 Start 函数前调用。这让您能够安排脚本的初始化顺序。
Awake 不能作为协同程序使用。
注意:对于 C#,请使用 Awake 代替构造函数进行初始化,因为组件的序列化状态在构造时是未定义的。
与构造函数一样,Awake 仅调用一次。
注意:对未激活的 GameObject 调用 GameObject.SetActive 可以将其激活。
using UnityEngine;
public class ExampleClass : MonoBehaviour { private GameObject target;
void Awake() { target = GameObject.FindWithTag("Player"); } }
以下两个脚本协同工作。 Example1 未调用 Awake 函数,因此启动为非激活状态。 Example2 是一个普通的 GameObject 脚本。它有权访问 Example1 脚本。
using UnityEngine;
public class Example1 : MonoBehaviour { void Awake() { Debug.Log("Awake"); }
void Start() { Debug.Log("Example1");
// Update() can be disabled by calling: // gameObject.SetActive(false); }
void Update() { if (Input.GetKeyDown("b")) { print("b key was pressed"); } } }
Example2 会导致调用 Example1 中的 Awake。 使用空格键执行该操作:
using UnityEngine;
public class Example2 : MonoBehaviour { // GO has Example1 script assigned to it public GameObject GO;
void Start() { Debug.Log("Example2"); }
void Update() { if (Input.GetKeyDown("space")) { Debug.Log("space key was pressed"); GO.SetActive(true); } } }
Awake 不能作为协同程序使用。