Start 在脚本启用时,并在第一次调用任何 Update 方法之前,在该帧上被调用。
与 Awake 函数一样,Start 在脚本的生命周期中只被调用一次。如果脚本在初始化时未启用,Start 可能不会在与 Awake 相同的帧上被调用。
Awake 函数在场景中所有对象的 Start 函数被调用之前,被调用在所有对象上。此特性在对象 A 的初始化代码需要依赖于对象 B 已经完成初始化的情况下很有用;B 的初始化应该在 Awake 中完成,而 A 的初始化应该在 Start 中完成。
在游戏过程中实例化对象时,它们的 Awake 函数在场景对象的 Start 函数完成之后被调用。
Start 函数可以定义为一个 协程,这使得 Start 可以暂停其执行(yield)。
// Initializes the target variable. // target is private and thus not editable in the Inspector
// The ExampleClass starts with Awake. The GameObject class has activeSelf // set to false. When activeSelf is set to true the Start() and Update() // functions will be called causing the ExampleClass to run. // Note that ExampleClass (Script) in the Inspector is turned off. It // needs to be ticked to make script call Start.
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { private float update;
void Awake() { Debug.Log("Awake"); update = 0.0f; }
IEnumerator Start() { Debug.Log("Start1"); yield return new WaitForSeconds(2.5f); Debug.Log("Start2"); }
void Update() { update += Time.deltaTime; if (update > 1.0f) { update = 0.0f; Debug.Log("Update"); } } }