Awake()和Start()之迷二

一定义:(来自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   ==========>

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

4 

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

最后的结果为200.


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



你可能感兴趣的:(unity3d,unity3d,unity3d,unity3d,执行顺序)