Unity 继承MonoBehaviour脚本 执行顺序 详解
先看结果
Awake ->OnEnable-> Start ->-> FixedUpdate-> Update -> LateUpdate ->OnGUI ->OnDisable ->OnDestroy
如果Script0, Script1,Script2脚本上都有Awake OnEnable Start这些函数
执行顺序
Script0, Script1,Script2脚本上Awake函数
Script0, Script1,Script2脚本上OnEnable函数
Script0, Script1,Script2脚本上Start函数
。。。。。。。。。。
如果一定要明确Script0的Awake函数执行顺序高于Script1,Script2的Awake函数
则需要设置脚本执行的顺序
点击红色框的+号 添加对应的脚本
*数值越小的脚本将先执行,如果没有设置的脚本将按默认的顺序执行。
详解
Awake(执行一次)
官方解释:当一个脚本实例被载入时Awake被调用
最最最最开始被调用
执行代码
Instantiate("实例化的预设");
*同时预设上Inspector红色圈为勾选状态
预设上的脚本会立马执行Awake函数;
OnEnable(执行多次)
官方解释:当对象变为可用或激活状态时此函数被调用。
每次激活对象时 对象上继承MonoBehaciour上脚本 会调用一次
执行代码
gameObject.SetActive(false);//先隐藏对象 gameObject.SetActive(true);//显示对象
或
enabled = false;//先关闭启用 enabled = true;//开启启用
*都会立马会执行OnEnable函数
*函数里适合放适配的逻辑
Start(执行一次)
官方解释:Start仅在Update函数第一次被调用前调用。
红色框勾选对应继承MonoBehaciour脚本的继承变量enabled
enabled 官方解释:启用行为被更新,禁用行为不更新。
即enabled == false 不执行Update函数 enabled == true 执行Update函数
*如果运行前不勾选红色框勾选或者在Awake函数里调用 enabled == false 则不会执行Start函数。
*Start函数适合放界面初始化 设置文本内容 过去子级对象 逻辑
FixedUpdate(执行N次)
官方解释: 当MonoBehaviour启用时,其 FixedUpdate 在每一帧被调用。
FixedUpdate时间在Edit->ProjectSettings->Time修改
最好不要去修改这个时间
*FixedUpdate函数适合调用Rigidbody逻辑
Update(执行N次)
官方解释: 当MonoBehaviour启用时,其Update在每一帧被调用。
实现各种游戏行为最常用的函数
*当enabled == false 不执行Update函数
LateUpdate(执行N次)
官方解释: 当Behaviour启用时,其LateUpdate在每一帧被调用。
*先执行Updatee然后执行lateUpdate。
OnGUI(执行N次)
官方解释: 渲染和处理GUI事件时调用。
OnDisable(执行多次)
官方解释: 当对象变为不可用或非激活状态时此函数被调用。
于OnEnable相对应 一个是打开后会调用 一个是关闭后调用。
OnDestroy(执行多次)
官方解释: 当MonoBehaviour将被销毁时,这个函数被调用。
执行
Destroy(gameObject);
挂载在gameObject上的脚本立马会执行OnDestroy函数。