赞
踩
温故而知新,有些函数过久了忘了调用顺序,发个文记一下,下边有对各个函数的解释。
这些函数在场景开始时被调用(场景中的每个对象一次)。
请注意,对于添加到场景中的对象,所有对象的 Awake 和 OnEnable 函数 脚本将在为它们中的任何一个调用 Start、Update 等之前调用。当然,当您在游戏过程中实例化一个对象时,这不能强制执行。
对于属于场景资源的对象,在 Update 之前对所有脚本调用 Start 函数,等等对它们中的任何一个调用。当然,当您在游戏过程中实例化一个对象时,这不能强制执行。
当您跟踪游戏逻辑和交互、动画时,相机
位置等,您可以使用一些不同的事件。常见的模式是在Update函数中执行大多数任务,但您也可以使用其他函数。
FixedUpdate: FixedUpdate通常比Update更频繁地调用。如果帧速率较低,则每帧可以调用多次,如果帧速率较高,则可能根本不会在帧之间调用。所有物理计算和Update都在FixedUpdate之后立即发生。在FixedUpdate中应用移动计算时,您不需要将值乘以Time.deltaTime。这是因为FixedUpdate是在一个可靠的计时器上调用的,与帧速率无关。
Update: 每帧调用一次Update。它是帧更新的主要主力功能。
LateUpdate: LateUpdate在Update完成后每帧调用一次。当LateUpdate开始时,在Update中执行的任何计算都将完成。LateUpdate的常见用途是跟随第三人称相机。如果您让角色在Update中移动和转动,您可以在LateUpdate中执行所有摄像机移动和旋转计算。这将确保角色在相机跟踪其位置之前已完全移动。
一般来说,您不应该依赖于为不同的游戏对象调用相同事件函数的顺序——除非该顺序被明确记录或可设置。(如果您需要对播放器循环进行更细粒度的控制,可以使用PlayerLoop API。)
您不能指定为同一 MonoBehaviour 子类的不同实例调用事件函数的顺序。例如,一个 MonoBehaviour 的Update函数可能在另一个 GameObject 上的相同 MonoBehaviour 的Update函数之前或之后调用 - 包括它自己的父级或子级 GameObjects。
您可以指定一个 MonoBehaviour 子类的事件函数应该在另一个子类的事件函数之前被调用(使用“项目设置”窗口的“脚本执行顺序”面板)。例如,如果您有两个脚本,EngineBehaviour 和 SteeringBehaviour,您可以设置脚本执行顺序,使 EngineBehaviour 始终在 SteeringBehaviour 之前更新。
当 Unity 评估动画系统时, 这些功能和Profiler会调用标记。
OnStateMachineEnter:在状态机更新步骤期间,当控制器的状态机进行流经进入状态的转换时,在第一个更新帧上调用此回调。不需要转换到StateMachine子状态。
仅当动画图中存在控制器组件(例如AnimatorController或AnimatorOverrideController或AnimatorControllerPlayable)时才会发生此回调。
注意:将此回调添加到StateMachineBehaviour组件会禁用多线程状态机评估。
OnStateMachineExit:在状态机更新步骤期间,当控制器的状态机进行通过退出状态的转换时,在最后一个更新帧上调用此回调。不需要转换到StateMachine子状态。
仅当动画图中存在控制器组件(例如AnimatorController或AnimatorOverrideController或AnimatorControllerPlayable)时才会发生此回调。
注意:将此回调添加到StateMachineBehaviour组件会禁用多线程状态机评估。
Fire Animation Events:调用从上次更新时间到当前更新时间之间采样的所有剪辑的所有动画事件。
StateMachineBehaviour (OnStateEnter/OnStateUpdate/OnStateExit):一个层最多可以有 3 个活动状态:当前状态、中断状态和下一个状态。使用定义OnStateEnter、OnStateUpdate或OnStateExit回调的 StateMachineBehaviour 组件为每个活动状态调用此函数。
该函数首先针对当前状态调用,然后是中断状态,最后是下一个状态。
仅当动画图中存在控制器组件(例如AnimatorController或AnimatorOverrideController或AnimatorControllerPlayable)时才会发生此步骤。
OnAnimatorMove:每个更新帧,每次调用一次动画组件修改根运动(Root Motion)
StateMachineBehaviour(OnStateMove):在每个活动状态上调用它,并使用定义此回调的StateMachineBehaviour 。
OnAnimatorIK:设置动画 IK。对于启用了IK 通道的每个 Animator Controller 层调用一次。
此事件仅在您使用 Humanoid 装备时执行。
StateMachineBehaviour(OnStateIK):使用StateMachineBehaviour组件在每个活动状态上调用该组件,该组件在启用IK 传递的层上定义此回调。
WriteProperties:将所有其他动画属性从主线程写入场景。
脚本生命周期流程图中显示的一些动画函数不是您可以调用的事件函数;它们是 Unity 处理动画时调用的内部函数。
这些功能有探查器标记( Profiler Markers),因此您可以使用Profiler查看 Unity 何时在框架中调用它们。了解 Unity 何时调用这些函数可以帮助您准确了解您调用的事件函数何时执行。
例如,假设您在FireAnimationEvents回调中调用Animator.Play 。如果您知道FireAnimationEvents回调仅在状态机更新和进程图函数执行后触发,您可以预期您的动画剪辑
将在下一帧播放,而不是立即播放。
状态机更新:在执行序列中的这一步评估所有状态机。仅当动画图中存在控制器组件(例如AnimatorController或AnimatorOverrideController或AnimatorControllerPlayable)时,才会发生此步骤。
注意:状态机评估通常是多线程的,但添加某些回调(例如OnStateMachineEnter和OnStateMachineExit)会禁用多线程。有关详细信息,请参阅上面的动画更新循环。
ProcessGraph:评估所有动画图。这包括对所有需要评估的动画片段进行采样,以及计算 Root Motion。
ProcessAnimation:混合动画图的结果。
WriteTransforms:将所有动画变换从工作线程写入场景。具有多个启用了IK 通道
的图层的 Humanoid 装备可以有多个WriteTransforms通道
注意:这些回调仅适用于内置渲染管线
正常的协程更新在 Update 函数返回后运行。协程是一个可以暂停执行(yield)直到给定的 YieldInstruction 完成的函数。协程的不同用途:
这些函数会在场景中的所有活动对象上调用:
有个更详细的 放下链接https://blog.csdn.net/u014361280/article/details/81363101
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。