Unity脚本概述
与其他常用的平台有所不同,Unity中的脚本程序如果要起作用,主要途径为将脚本附加到特定的游戏对象上。这样脚本中不同的方法在特定的情况下会被调用,实现特定的功能。
在Unity脚本中,各事件函数的功能和大体的执行顺序如下:
1、Awake
Awake用于脚本唤醒。此方法为系统执行的第一个方法,用于脚本
的初始化,在脚本的生命周期中只执行一次。
2、Start
Start方法在Awake之后执行,在脚本的生命周期中只执行一次。
由于Awake和Start函数的特性与c#中的构造函数类似(一般情况
下,在脚本的生命周期中只执行一次),所以在Unity中也常用来
初始化类的成员变量。
这个方法在游戏场景加载时被调用,在该方法内可以写一些游戏场
景初始化之类的代码。
3、FixedUpdate
FixedUpdate用于固定频率更新。这个方法会在固定的物理时间
步调调用一次。这里也是基本物理行为代码执行的地方。
通常情况下下,FixedUpdate()比Update()更频繁地调用。
当帧率较低时,在某一帧的时间间隔内比Update可能会被调用多
次;而当帧率很高时,在某一帧的时间间隔内FixedUpdate可能
根本不会调用。
还有一点,在Unity中,若设置Time Scale值为0,可以实现动
力学特性的暂停,即所有的FixedUpdate中的代码都不会执行。
4、Update
Update用于正常更新,即用于帧更新后同步场景状态。此方法每
帧都会由系统自动调用一次。大部分的游戏代码在这里执行,除
了物理部分的代码。
在使用Update()时,对于一些变量,如速度、移动距离等通常需
要乘以Time.deltaTime来抵消帧率带来的影响,使物体状态的
改变看起来比较均匀正常。而在FixedUpdate中,由于其更新频
率固定,所以不需要采用Time.deltaTime来修正状态改变频
率。
5、LateUpdate
LateUpdate用于延迟更新,此方法在Update()之后执行,每
一帧调用一次。
6、OnGUI
OnGUI用来绘制用户交互界面,每一帧会调用多次。其中,与布
局(Layout)和重汇(Repaint)相关的事件会被优先处理,然
后是键盘事件和鼠标事件。
7、OnDestroy
OnDestroy在当前脚本被销毁时调用。若在脚本中动态分配了内
存,可以再OnDestroy()中进行释放。
同时,开发人员在有需要的情况下,还可以重写一些处理特定事
件的回调方法,这类方法一般以On前缀开头,如
OnCollisionEnter方法(此方法在系统检测到碰撞开始时回
调)等。
Unity官方提供的事件顺序图:
1、继承自MonoBehaviour类
Unity中所有挂载到游戏对象上的脚本中的类必须继承
MonoBehaviour类(直接的或者间接地),
MonoBehaviour定义了各种回调方法,如Start、
Update等。
2、类名字必须匹配文件名
C#的类名需要手动编写,而且类名必须和文件名相同,否则当脚本挂载到游戏对象时,在控制台会报错。
3、使用Awake或Start方法初始化
用于初始化脚本的代码必须置于Awake或Start方法中。两
者不同之处在于Awake在加载场景时运行;Start方法是在
第一次调用Update或FixedUpdate方法之前被调用;
Awake运行在所有Start方法之前。
4、Unity脚本中的协同程序有不同的语法规则
(1)协程的返回值必须是Enumerator。
(2)协程的参数不能加关键字ref或out。
(3)在C#脚本中,必须通过StartCoroutine来启动协
程。
(4)yield语句要用yield return 来代替。
(5)在函数Update和FixedUpdate中,不能使用yield
语句,但可以启动协程。
5、只有满足特定情况变量才能显示在属性查看器中
只有序列化的成员才能显示在属性查看器中,如果属性想
在属性查看器中显示,其必须是public类型的。
6、尽量避免使用构造函数
不要在构造函数中初始化任何变量,要用Awake或Start
方法来实现。即便是在编辑模式,Unity会自动调用构造
函数。
7、调试
Unity中C#代码的调试与传统的C#调试有所不同。Unity
自带了完善的调试功能,在Unity中的控制台
(Console)中包含了当前的全部错误,双击这个错误,
可以自动跳转到默认的脚本编辑器中,然后光标会在错误
所对应的行首跳动。
Unity中的坐标系
一般情况下,在Unity中,x轴为红色的轴表示左右,y轴为绿色的
轴表示上下,z轴为蓝色的轴表示前后。