在Unity脚本中,有一些事件函数会在脚本执行时按预定顺序执行。 该执行顺序如下所述:
编辑
Reset
:Reset是用来初始化脚本属性的,在第一次脚本附在对象上的时候和按下Reset按钮的时候会被执行。
第一次场景加载
Awake
:Awake
方法总是在Start
方法执行之前和在一个prefab初始化后被调用。(如果一个gameobject
处于inactive
的状态,则Awake
不会被调用,一直会到gameobject
处于active状态的时候会被调用)OnEnable
:(只有在对象处于活动状态时才会调用):在启用对象后立即调用此函数, 当创建一个MonoBehaviour
实例时会发生。例如,当一个关卡加载或者一个带有脚本的GameObject
实例化的时候。OnLevelWasLoaded
:这个方法被执行,是为了通知游戏已经加载了新的关卡。
请注意,对于添加到场景中的对象,所有脚本的Awake
和OnEnable
函数将在调用其中的任何脚本的Start
,Update
等之前调用。 当然,在游戏过程中对象被实例化时,这不能被强制执行。
在第一帧更新之前
Start
:只有在启用脚本实例时,才会在第一次帧更新之前调用Start
。
对于添加到场景中的对象,对象上的所有脚本的Update
函数执行之前调用Start函数。 当然,在游戏过程中对象被实例化时,这不能被强制执行。
帧与帧之间
OnApplicationPause
:这个方法将在暂停键按下的那一帧结束的时候被调用。在调用OnApplicationPause
之后会发出一个额外的帧,以允许游戏显示指示暂停状态的图形。
Update的顺序
当你跟踪游戏逻辑和交互,动画,相机位置等时,可以使用几个不同的事件。 常用的模式是在Update函数中完成大部分的任务,不过也有其他一些函数可以利用。
FixedUpdate
:FixedUpdate
通常比Update
被调用得更频繁。如果帧率很低的时候,FixedUpdate
可以一帧被调用多次;如果帧率很高的时候,FixedUpdate
也可以几帧调用一次。所有的物理计算和更新都会在FixedUpdate
后立即生效。在FixedUpdate
中应用运动计算时,您不需要通过Time.deltaTime
乘以您的值。 这是因为FixedUpdate
是在可靠的定时器上调用的,与帧速率无关。Update
:Update
函数每一帧调用一次。这是我们使用最频繁的一个函数。LateUpdate
:LateUpdate
同样也是每一帧调用一次,在Update
函数结束之后被调用。LateUpdate
常用于第三人称摄像头的实时跟随。如果你在Update
函数中让角色移动或者转弯,你可以把所有摄像头的移动和旋转计算都放到LateUpdate
函数中。这可以确保在角色完成移动或者转弯动作之后摄像头才开始跟随。
渲染期间
OnPreCull
:在相机剔除场景之前调用。OnBecameVisible
/OnBecameInvisible
:当一个物体对任何相机变得可见/不可见时调用。OnWillRenderObject
:如果对象可见,则为每个摄像机调用一次。OnPreRender
:在相机开始渲染场景之前调用。OnRenderObject
:所有常规场景渲染完成后调用。 此时可以使用GL类或Graphics.DrawMeshNow
绘制自定义几何图形。OnPostRender
:相机完成渲染场景后调用。OnRenderImage
:在场景渲染完成后调用,用来对图像进行后期处理。OnGUI
:每帧调用多次,用于响应GUI事件。Layout和Repaint事件首先被处理,然后是每个输入事件的布局和键盘/鼠标事件。OnDrawGizmos
:用于在场景视图中绘制Gizmos以进行可视化。
协程
正常的协程更新在Update
函数返回之后调用。协程是一个函数,可以暂停执行(yield),直到给定的YieldInstruction完成。 Coroutines的不同用途:
yield
:所有的Update
函数在下一帧被调用后,协程将继续。yield WaitForSeconds
:在指定的时间延迟后,调用所有Update
函数之后,继续。yield WaitForFixedUpdate
:在所有脚本上调用所有FixedUpdate
后继续。yield WWW
:一个WWW下载完成之后继续。yield StartCoroutine
:链接协程,会等MyFunc协程先完成。
当对象被销毁的时候
OnDestroy
:对象存在的最后一帧更新完之后的所有Update
函数执行完之后执行。(对象可能在响应Object.Destroy
或关闭场景时被销毁)。
当中止的时候
这些函数被调用到场景中的所有活动对象上:
OnApplicationQuit
:在应用程序退出之前,所有游戏对象都会调用该函数。 在编辑器中,当用户停止播放模式时会调用它。OnDisable
:当对象被禁用或不活动时,将调用此函数。
流程图
代码
public class Demo : MonoBehaviour
{
private void Awake()
{
}
private void OnEnable()
{
}
void Start()
{
}
private void FixedUpdate()
{
}
void Update()
{
}
private void LateUpdate()
{
}
private void OnGUI()
{
}
private void OnApplicationPause(bool pause)
{
}
private void OnDisable()
{
}
private void OnApplicationQuit()
{
}
private void OnDestroy()
{
}
}
原文链接
原文链接:https://blog.csdn.net/u012130706/article/details/79393527?utm_source=copy