在学习Unity时,掌握如何编写脚本是必须掌握的一项基本技能。可是关于Unity的游戏脚本中各函数的生命周期是怎样开始和结束的,它们的执行顺序是如何安排的?这一点咱们要清楚的了解。html
咱们知道Unity中的脚本大多派生于MonoBehaviour类,因此能够重写MonoBehaviour类里面的方法来实现咱们想要的功能。那么自定义脚本中的各函数执行顺序和MonoBehaviour里面的函数执行顺序大体是同样的。函数
首先介绍一下MonoBehaviour类里面的成员变量和成员函数。布局
1 public class MonoBehaviour : Behaviour 2 { 3 public MonoBehaviour(); 4 5 public bool useGUILayout { get; set; } 6 7 public void CancelInvoke(); 8 public void CancelInvoke(string methodName); 9 public void Invoke(string methodName, float time); 10 public void InvokeRepeating(string methodName, float time, float repeatRate); 11 public bool IsInvoking(); 12 public bool IsInvoking(string methodName); 13 public static void print(object message); 14 public Coroutine StartCoroutine(IEnumerator routine); 15 [ExcludeFromDocs] 16 public Coroutine StartCoroutine(string methodName); 17 public Coroutine StartCoroutine(string methodName, object value); 18 public Coroutine StartCoroutine_Auto(IEnumerator routine); 19 public void StopAllCoroutines(); 20 public void StopCoroutine(Coroutine routine); 21 public void StopCoroutine(IEnumerator routine); 22 public void StopCoroutine(string methodName); 23 }
注:对于MonoBehaviour类的成员变量和成员函数,只做一些相关介绍,具体的使用方法在之后会陆续进行举例说明。或者能够参考Unity的API手册。学习
Variables 变量spa
useGUILayout 禁用此项,将会跳过GUILayout布局阶段3d
Functions 函数code
Overridable Functions 可重写函数htm
LateUpdate 原型:void LateUpdate();当MonoBehaviour启用时,LateUpdate函数在每一帧被调用。LateUpdate是在全部Update函数调用后被调用。这可用于调整脚本执行顺序。blog
FixedUpdate 原型:void FixedUpdate();当MonoBehaviour启用时,FixedUpdate函数在每一帧被调用。生命周期
Awake 原型:void Awake();当脚本实例被载入时Awake被调用。Awake用于在游戏开始以前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次。
Start 原型:void Start();Start仅在Update函数第一次被调用前调用。和Awake不一样的是,Awake函数的调用要早于Start,而且Start函数只在脚本实例被启用时调用。
Reset 原型:void Reset();重置为默认值。Reset是在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。Reset最经常使用于在检视面板中给定一个最经常使用的默认值。
以上是经常使用的成员函数,还有一些成员函数是关于鼠标操做事件的,好比:OnMouseOver(),OnMouseEnter()等。
另外OnGUI()函数也是比较经常使用的,它主要负责窗口控件的渲染和管理。
接下来附上一张官方文档对脚本中各函数生命周期的图表:
图片来源于:http://docs.unity3d.com/Manual/ExecutionOrder.html
可见Unity脚本从建立到销毁是具备一个完整的生命周期的,主要的调用顺序以下:
OnGUI函数会在每帧上屡次被调用,由于要时刻准备相应里面的GUI事件。