描述

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 不能作为协同程序使用。