Unity学习笔记(一)事件函数

本文详细介绍了Unity中重要的事件函数,包括Reset(), Awake(), OnEnable(), Start(), Update(), FixedUpdate(), LateUpdate()等,并通过实例演示了它们的执行顺序及触发条件。
摘要由CSDN通过智能技术生成

一.前言

  • 自学了一段时间Unity,感觉一些知识零零散散的在网上查找,不易于自己吸收理解,特此把一些易混淆的知识点整理出来,以供自己回顾理解。

二.事件函数(部分)

  • Unity中脚本运行时,自带的一些事件函数会根据相应的顺序进行执行,我们来讲一下部分事件函数的作用(按顺序)
  • 我们先来看一下Unity官网给出的顺序图



    接下来我们一个个来解释

(1)Reset()

  • 根据上图给出的英文解释,我们可以知道Reset()适用于编辑器情况中脚本依附到场景某个物体中或被初始化的时候才会调用
    我们来作下测试,先在Unity中创建一个test脚本,如下编写Reset()函数
public class test : MonoBehaviour
{
    private void Reset()
    {
        Debug.Log("This is Reset");
    }
}
  • 接着,我们再在场景中创建一个Cube物体,然后将我们的test脚本拖拽至Cube物体身上,然后我们就会发现输出了我们脚本中的This is Reset

    当然,还有一种触发Reset()方式,就是在我们的Cube物体的Inspector面板中,对脚本test进行Reset时也会触发

(2)Awake()、OnEnable()、Start()

  • Awake():即在脚本初始化的时候执行一次
  • OnEnable():脚本依附在GameObject上后,只有在.SetActive(true)情况才会执行
  • Start():脚本开始运作执行一次
    顺序:Awake()->OnEnable()->Start()
    我们来作下测试:创建新的test2脚本,代码如下
public class test1 : MonoBehaviour {

    void Awake()
    {
        Debug.Log("this is Awake");
    }
    void OnEnable()
    {
        Debug.Log("this is OnEnable");
    }
    void Start()
    {
        Debug.Log("this is Start");
    }
}

将其附在新的Cube物体上,然后我们点击运行,发现如下图

证实了执行顺序是正确的

接下来我们将Cube隐藏,然后再次运行,我们会发现3个函数都不会执行,因为此时物体被禁用了,相应的脚本不会起到作用

接着,我们在运行的情况下,勾选Cube物体,将其显示,会发现只有OnEnable()执行了
Debug.Log(“this is Update”);
这是为什么?其实将物体勾选显示,调用了SetActive(true)这句指令,而起内部会同时触发响应OnEnable()函数(说白了就是OnEnable()嵌套在SetActive内部),相应的为什么不触发Awake()和Start()呢,因为物体不是被实例化的,勾选了物体,只能表示我让你显示出来,谁让你一开始启动的时候被隐藏了,所以调用不了Awake()和Start(),这两个函数只能在初次实例化的时候执行,否则无法执行。
ps:OnDisable()其实就是OnEnable()的相反情况,就不细说了

(3)FixedUpdate()、Update()、LateUpdate()

  • FixedUpdate():不受帧率的影响,是一个非常可靠的计时器哦
  • Update():每一秒执行相应的次数,这里的次数即帧数,是根据硬件设备以及内部函数复杂度决定的,可能上一秒60帧,这一秒就是80帧,不唯一
  • LateUpdate():和Update()在同一帧执行
    同样我们来作下测试,代码如下
public class test2 : MonoBehaviour {
    void FixedUpdate()
    {
        Debug.Log("this is FixedUpdate");
    }
    void Update()
    {
        Debug.Log("this is Update");
    }
    void LateUpdate()
    {
        Debug.Log("this is LateUpdate");
    }
}

我们将其依附到Cube上运行,得到如下结果

可以看到,Update()和LateUpdate()执行相同次数,FixedUpdate()不受帧率影响,说白了FixedUpdate()是匀速直线运动,另外两个是变速直线运动。


三.结尾

目前我接触的较多的就是上面几个了,其余的一些事件函数大家可以自己去作测试了解一下作用,今天就先到这啦,如果上面有错误或者解释有问题的也请大大们指出~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值