第一次接触unity时,不理解这两个函数到底有何区别,以下是官方文档的解释: Awake[size=0.875em]() Awake is called when the script instance is being loaded.
[size=0.875em]Start() Start is called on the frame when a script is enabled just before any of the Update methods is called the first time.
Awake()是用来初始化游戏中的变量的,相当于构造器的功能,Awake不能够使用协同。 Start()函数是在任意Update方法被调用之前第一个调用的。
[C#] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important][backcolor=rgb(108, 226, 108) !important][color=white !important]?
using UnityEngine;
using System.Collections;
public class TestAs : MonoBehaviour {
void Awake(){
Debug.Log("Awake函数被调用");
}
// Use this for initialization
void Start () {
Debug.Log("Start函数被调用");
}
// Update is called once per frame
void Update () {
}
}
using UnityEngine; using System.Collections; public class TestAs : MonoBehaviour {
void Awake()
{ Debug.Log("Awake函数被调用"); } // Use this for initialization void Start () { Debug.Log("Start函数被调用"); } void Update () { } 2.将脚本拖拽到场景中的相机上,运行,在Console下会出现以下输出,如图1-1所示:
3.将TestAs脚本设置为非启用状态,如图所示,TestAs的脚本上的对钩已被去掉(红线所示),如图1-2所示:
4.点击启用则Console则只输出来"Awake函数被调用"(Console前两个输出的语句是第一次运行时的输出结果),如图1-3所示:
因此如果有这样的情况,对象A的初始化依赖于对象B的初始化,则对象B可以在Akake函数里进行初始化,这样可以防止空指针异常的出现。 或者在Awake中判断是否将某脚本启用。 |