Awake()和Start()之迷二

来源:互联网 发布:统计学:从数据到结论 编辑:程序博客网 时间:2024/06/06 03:03

一定义:(来自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 initializationvoid Awake(){hp = 100;}void Start () {hp = 200;}// Update is called once per framevoid Update (){}public int hp = 10;}
monster,cs这个脚本附给一个怪物预设。

using UnityEngine;using System.Collections;public class test : MonoBehaviour {// Update is called once per framevoid 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   ==========>

-----------------------------------------------------------------------------------------------------------------------------------------------

4 

-------------------------------------------------------------------------------------------------------------------------------------------------------

最后的结果为200.


到这里你应该知道Awak 、Start、及相关地方的执行顺序了。使用要慎啊。