一定义:(来自u3d圣典)
Awake()
当一个脚本实例被载入时Awake被调用。
Awake用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数搜索它们。每个游戏物体上的Awke以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息。Awake总是在Start之前被调用。它不能用来执行协同程序。
Start()
Start仅在Update函数第一次被调用前调用。
Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。
二、测试在编辑场景中的对象的脚本中的变量,被赋值的顺序
1、首先它值来处于,它被定义时所给的初始值。(变成1)
2、接着的它的值,来自编辑器中的检视面板的设定。(变成2)
3、然后,就到了Awake()了。(变成10)
4、最后才是Start().(变成20)
三、测试在代码中的对象实例化一个对象。这个对象的脚本中的变量,的被赋值的顺序。
如下面的下面的两年脚本monster.cs,和test.cs
using UnityEngine; using System.Collections; public class monster : MonoBehaviour { // Use this for initialization void Awake() { hp = 100; } void Start () { hp = 200; } // Update is called once per frame void Update () { } public int hp = 10; }monster,cs这个脚本附给一个怪物预设。
using UnityEngine; using System.Collections; public class test : MonoBehaviour { // Update is called once per frame void Update () { if(Input.GetKeyDown(KeyCode.Space)) { GameObject monsterObj = Instantiate(prefabMonster) as GameObject; monster monsterComp = monsterObj.GetComponent<monster>(); monsterComp.hp = 500; } } #region 变量区 public GameObject prefabMonster; #endregion }test.cs用来控制怪物的构造。
经i测试跟踪,monsterComp.hp的数值被赋值的顺序是:
1 ====>
------------------------------------------------------------------------------------------------------------------------------------------------
2 =======>
注: Instantiate(prefabMonster)这名的内部就会调用Awake
-----------------------------------------------------------------------------------------------------------------------------------------------
3 ==========>
-----------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------
最后的结果为200.
到这里你应该知道Awak 、Start、及相关地方的执行顺序了。使用要慎啊。