1. 调用时机
-
Awake:
-
在脚本实例被加载时调用,无论脚本是否启用。
-
即使脚本组件未激活(
enabled = false
),Awake
也会执行。
-
-
Start:
-
在脚本启用后,且在第一次
Update
之前调用。 -
只有脚本组件激活(
enabled = true
)时,Start
才会执行。
-
2. 执行顺序
-
Awake
总是先于Start
执行。 -
所有脚本的
Awake
执行完毕后,才会执行Start
。
3. 使用场景
-
Awake:
-
用于初始化不依赖其他对象的变量或组件。
-
适合在游戏启动时执行一次的操作。
-
-
Start:
-
用于初始化依赖其他对象或组件的操作。
-
适合在游戏正式开始前执行的操作。
-
4. 脚本实例化
如果一个场景中的物体没有被激活(即 GameObject
的 SetActive(false)
),那么它身上脚本的 Awake
和 Start
都不会被调用。原因在于Awake
是脚本实例化时调用的,场景中未激活的物体,在游戏开始时是不会被加载以及实例化的,因此物体身上的脚本也不会被实例化。
5. 脚本实例化的时机:
-
场景加载时
-
当一个场景被加载时,场景中所有激活的物体(
GameObject
)上的脚本会被实例化。 -
物体被激活时
-
如果物体一开始是未激活的(
SetActive(false)
),当它被激活时(SetActive(true)
),Unity 会实例化该物体上所有脚本。 -
物体被实例化时
-
当一个物体通过
Instantiate
方法动态创建时,Unity 会实例化该物体上所有脚本。