Unity3D的事件函数

       当我们打开unity3D自带的案例AngryBots时,会发现没有像常见程序那样的入口函数(比方。C的main函数。unity3D底层已经做好了吧)。取而代之,脚本中会有非常多事件函数。用于响应游戏中消息,每一个脚本都会有涉及Start、update等之类的函数负责初始化、更新等事件的处理。更像是一种分布式控制方式。脚本都是继承自MonoBehaviour内建类,以此与Unity内部工作机制相联系。它是一种组件能够挂接到GameObject上,能够改变GameObject的属性。

        Unity的脚本不像常规程序那样。会在一个循环中不断运行知道任务结束,它会通过调用一些事先声明好的事件函数,断断续续地将控制权传给一个脚本。在事件函数运行完成后,控制权又交回给Unity,仅仅要游戏运行过程中触发了事件,对应的事件函数就会被调用。MonoBehaviour类中定义了非常多事件函数,能够自己查看,比較常见的是Awake、Start、FixedUpdate、Update、LateUpdate、OnDestroy、OnDisable、OnEnable、OnGUI等。

        在场景载入时,场景中的全部物体都会调用Awake函数。

注意,无论有多少物体的Awake与Start函数被按随意顺序调用。在第一个Start函数调用前,全部的Awake函数都已运行。所以,能够在Start函数中调用随意在Awake函数中初始化过的信息。假设脚本实例化被启用,则Start函数在第一帧更新之前被调用。

        更新函数主要是放置处理GameObject的位置、方向、状态及行为等代码逻辑的地方,我们以此来追踪游戏逻辑、交互、动画、相机位置等。而FixedUpdate、Update、LateUpdate比較例如以下:

    1.   FixedUpdate:比Update调用更频繁。当帧率比較低时。每帧可被多次调用。假设帧率比較高。就可能不会被调用;全部的物理计算和更新都在FixedUpdate之后马上发生;当在FixedUpdate中计算物体移动时。不须要乘以Time.deltaTime。由于FixedUpdate是基于可靠的定时器的,与帧率无关。
    2. Update:每帧调用一次;帧更新的主要函数。
    3. LateUpdate:每帧调用一次,在Update之后运行。LateUpdate最常应用于第三人称控制器的相机尾随。

      (假设将角色的移动和旋转放在Update中,则能够把全部相机的移动旋转放在LateUpdate,从而在相机追踪到角色位置之前。确保角色已经完毕了移动。

        Unity有个系统。用来渲染并响应GUI控件。这类代码不像普通的帧更新代码一样。必须放在周期性调用的OnGUI函数里。

也能够检測场景中一个物体的鼠标事件。可用于实现指向性武器与展示鼠标下角色信息之类的需求。有个OnMouseXXX 事件函数集(OnMouseOver,OnMouseDown), 它们专门用于反馈用户鼠标行为。比如。鼠标点击一个物体时,这个物体挂的脚本的OnMouseDown函数就会被调用(假设有的话)。

        物理引擎通过物体挂的脚本中的事件函数。来通知它发生了碰撞。OnCollisionEnter, OnCollisionStay。 OnCollisionExit 函数分别在碰撞開始。持续与结束时调用。

假设碰撞体设置成了触发器(用于仅仅须要检測碰撞,而不须要对此碰撞进行物理反应的情况),那么会调用相应的OnTriggerEnter,OnTriggerStay,OnTriggerExit函数。假设一次物理更新中发生了多次碰撞,这些函数可能会被调用多次。这些函数会被传入一些碰撞的信息(碰撞位置。撞得物体是谁,等等)。

        MonoBehaviour类的具体事件函数列表可參考Unity3D的Documentation

            



原文地址:https://www.cnblogs.com/wgwyanfs/p/7065266.html