Unity脚本事件执行的顺序
2016-03-20 16:51
543 查看
有过c#开发经验的人都知道,程序的入口是一个类似于Main的函数,其他的代码都是以Main函数为起点。了解程序的执行循顺序对理解程序结构、判断在何处设置断点是极有帮助的。
在Unity脚本中,各事件函数的功能和顺序如下所述:
1、Awake
Awake用于脚本唤醒。此方法为系统执行的第一个方法,用于脚本初始化,在脚本的生命周期中只执行一次。
2、Start
Start方法在Awake之后执行,在脚本中只执行一次。
Awake和Start函数的特性与c#中的构造函数类似,一般在Unity中都常用来初始化类的成员变量。
3、FixedUpdate
FixedUpdate用于固定频率的更新。
在Unity中依次单击菜单项Edit->Project Setting->Time,可以打开Time Manager面板,其中Fixed Timestep选项用于设置FixedUpdate的更新频率,默认为0.02秒,也就是50次/秒。
通常情况下,FixedUpdate()会比Update()更频繁地调用。
在Unity中,若设置Time Scale值为0,可以实现动力学特性的暂停,即所有的代码都不会被执行。可以用此特性实现游戏暂停的功能。
4、Update
Update用于正常更新。用于帧更新后同步场景状态。
每帧都会由系统自动调用一次。
对于一些变量,如速度、移动距离等通常需要乘以Time.deltaTime来抵消帧率带来的影响,以此使物体状态的改变起来比较均匀、正常。
而在FixedUpdate中,由于其更新频率固定,故不需要采用Time.deltaTime来修正状态改变频率。
5、LateUpdate
LateUpdate用于延迟更新,此方法在Update()之后执行,每一帧调用一次。
6、OnGUI
OnGUI用来绘制用于交互界面,在一帧中会调用多次。其中,与布局Layout和重绘Repaint相关的事件会被优先处理,然后是键盘和鼠标事件。
7、OnDestroy
OnDestroy在当前脚本销毁时调用。若脚本中动态分配了内存,可以再OnDestroy()中进行释放。
其他:
在具体的项目开发中,一个项目会含有多个脚本,在一个游戏对象上也可以绑定若干个脚本,此时如果要控制脚本的执行顺序,可以通过单击菜单项
Edit->Project Setting->Script Execution Order 打开MonoManager面板,通过单击+,-按钮和拖动操作来设置特定脚本的执行顺序。
在Unity脚本中,各事件函数的功能和顺序如下所述:
1、Awake
Awake用于脚本唤醒。此方法为系统执行的第一个方法,用于脚本初始化,在脚本的生命周期中只执行一次。
2、Start
Start方法在Awake之后执行,在脚本中只执行一次。
Awake和Start函数的特性与c#中的构造函数类似,一般在Unity中都常用来初始化类的成员变量。
3、FixedUpdate
FixedUpdate用于固定频率的更新。
在Unity中依次单击菜单项Edit->Project Setting->Time,可以打开Time Manager面板,其中Fixed Timestep选项用于设置FixedUpdate的更新频率,默认为0.02秒,也就是50次/秒。
通常情况下,FixedUpdate()会比Update()更频繁地调用。
在Unity中,若设置Time Scale值为0,可以实现动力学特性的暂停,即所有的代码都不会被执行。可以用此特性实现游戏暂停的功能。
4、Update
Update用于正常更新。用于帧更新后同步场景状态。
每帧都会由系统自动调用一次。
对于一些变量,如速度、移动距离等通常需要乘以Time.deltaTime来抵消帧率带来的影响,以此使物体状态的改变起来比较均匀、正常。
而在FixedUpdate中,由于其更新频率固定,故不需要采用Time.deltaTime来修正状态改变频率。
5、LateUpdate
LateUpdate用于延迟更新,此方法在Update()之后执行,每一帧调用一次。
6、OnGUI
OnGUI用来绘制用于交互界面,在一帧中会调用多次。其中,与布局Layout和重绘Repaint相关的事件会被优先处理,然后是键盘和鼠标事件。
7、OnDestroy
OnDestroy在当前脚本销毁时调用。若脚本中动态分配了内存,可以再OnDestroy()中进行释放。
using UnityEngine; using System.Collections; public class methoExceOrder : MonoBehaviour { void Awake() { print("Awake is called"); } // Use this for initialization void Start () { print("Start is called"); } void OnGUI() { print("OnGUI is called"); } void LateUpdate() { print("LateUpdate is called"); } void FixedUpdate() { print("FixedUpdate is called"); } void OnDestroy() { print("OnDestroy is called"); } // Update is called once per frame void Update () { print("Update is called"); } }
其他:
在具体的项目开发中,一个项目会含有多个脚本,在一个游戏对象上也可以绑定若干个脚本,此时如果要控制脚本的执行顺序,可以通过单击菜单项
Edit->Project Setting->Script Execution Order 打开MonoManager面板,通过单击+,-按钮和拖动操作来设置特定脚本的执行顺序。
相关文章推荐
- Unity3D开发基础组件提取总结
- [UnityShader2]顶点片段着色器实例(五)
- Unity AssetBundle爬坑手记
- Unity Shaders and Effects Cookbook (1-4) 创建 Ramp Texture(渐变纹理)控制漫反射着色
- [UnityShader2]顶点片段着色器基础
- 关于Unity3D协程的使用
- 破解Unity3D的步骤-为部分人提供帮助
- 配置Unity脚本开发环境visual studio 2013 tools for unity
- unity c# LINQ查询
- unity c# Lambda表达式
- unity c# 泛型委托
- unity c# 标准事件模式
- unity c# 事件
- unity c# 接口
- Unity4.6 UI按钮绑定事件(一)
- 详解Unity 4.6新UI的布局
- 学习Unity 4.6新GUI系统
- Unity ugui 和 模型 粒子的层级管理
- unity3d热更新插件uLua学习整理
- 初学者学习 - Unity中的热更新 - Lua和C#通信