Unity脚本中各函数成员的生命周期
在学习Unity时,掌握如何编写脚本是必须掌握的一项基本技能。但是关于Unity的游戏脚本中各函数的生命周期是怎样开始和结束的,它们的执行顺序是如何安排的?这一点我们要清楚的了解。
我们知道Unity中的脚本大多派生于MonoBehaviour类,所以可以重写MonoBehaviour类里面的方法来实现我们想要的功能。那么自定义脚本中的各函数执行顺序和MonoBehaviour里面的函数执行顺序大致是一样的。
首先介绍一下MonoBehaviour类里面的成员变量和成员函数。
public class MonoBehaviour : Behaviour
{
public MonoBehaviour(); public bool useGUILayout { get; set; } public void CancelInvoke();
public void CancelInvoke(string methodName);
public void Invoke(string methodName, float time);
public void InvokeRepeating(string methodName, float time, float repeatRate);
public bool IsInvoking();
public bool IsInvoking(string methodName);
public static void print(object message);
public Coroutine StartCoroutine(IEnumerator routine);
[ExcludeFromDocs]
public Coroutine StartCoroutine(string methodName);
public Coroutine StartCoroutine(string methodName, object value);
public Coroutine StartCoroutine_Auto(IEnumerator routine);
public void StopAllCoroutines();
public void StopCoroutine(Coroutine routine);
public void StopCoroutine(IEnumerator routine);
public void StopCoroutine(string methodName);
}
注:对于MonoBehaviour类的成员变量和成员函数,只作一些相关介绍,具体的使用方法在以后会陆续进行举例说明。或者可以参考Unity的API手册。
Variables 变量
useGUILayout 禁用此项,将会跳过GUILayout布局阶段
Functions 函数
- Invoke 原型:void Invoke(string methodName,float time);根据时间调用指定方法名的方法。
- InvokeRepeating 原型:void InvokeRepeating (methodName : string, time : float, repeatRate : float);每隔指定时间调用指定方法名的方法,从第一次调用开始,每隔repeatRate时间调用一次.
- CancelInvoke 原型:void CancelInvoke ();取消这个MonoBehaviour上的所有调用。void CancelInvoke(string methodName);取消所有名为methodName的调用。
- IsInvoking 原型:bool IsInvoking(string methodName);某指定函数是否在等候调用。正在调用返回true,否则返回false。
- StartCoroutine 原型:Coroutine StartCoroutine(IEnumerator routine);开始协同程序。
- StopCoroutline 停止methodName的所有协同程序。
- StopAllCoroutline 停止所有动作的协同程序。
Overridable Functions 可重写函数
- Update 原型:void Update();当MonoBehaviour启用时,Update函数在每一帧被调用。
LateUpdate 原型:void LateUpdate();当MonoBehaviour启用时,LateUpdate函数在每一帧被调用。LateUpdate是在所有Update函数调用后被调用。这可用于调整脚本执行顺序。
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事件。
最新文章
- centos 更换软件源
- MooseFS
- android快速入门
- hive数据类型学习
- ASP.NET MVC学习之过滤器篇(2)
- CGRect包含交错,边缘,中心的检测
- 怎样学好C++语言
- struts2(一) struts2入门
- MyBatis之ObjectFactory
- 【LeetCode】160. Intersection of Two Linked Lists
- SERvet的表单
- yii中接收微信传过来的json数据
- leetcode206
- 《springCloud系列》——Eureka 进行服务治理
- css中span元素的width属性无效果原因及多种解决方案
- Lucene系列二:Lucene(Lucene介绍、Lucene架构、Lucene集成)
- iOS - viewDidLoad, viewWillDisappear, viewWillAppear区别及加载顺序
- HDU 6070 Dirt Ratio(分数规划+线段树)
- centos 安装 mysql(指定安装版本)
- [转]MSSQL 判断临时表是否存在