Unity脚本生命周期

生命周期表

脚本周期

1.初始化阶段

场景开始时

初始化阶段

1.Awake

场景创建时或prefab实例化时,若为inactive则在active时调用,仅执行一次

一般为了初始化游戏变量和游戏状态。仅执行一次。

如果游戏对象在启动期间处于非活动状态,则在激活之后才会调用 Awake。

只要该物体存在于场景中且属于活跃状态,就会执行Awake,与物体挂载的脚本组件是否激活无关。

2.OnEnable

仅在游戏对象是可激活状态时调用,取消激活后再次激活也会响应。

在创建 MonoBehaviour 实例时(例如加载关卡或实例化具有脚本组件的游戏对象时)会执行此调用。

场景加载完,GameObject实例化时,对象enabled时

3.OnLevelWasLoaded

场景全部加载完成后

执行此函数可告知游戏已加载新关卡。

4.Reset 

当Scripts第一次的绑定到物体上或者点击Reset按钮的时候触发。

且只在Editor模式下触发,游戏打包的时候不会触发。

Editor级别,非playmode下脚本挂载时或主动调用

5.Start

仅在场景中所有Awake 和 OnEnable执行后,所有场景中对象第一帧update之前,且仅执行一次

2.物理计算阶段

物理阶段

1.fixedupdate

每一帧会执行的调用,所有的物理行为的每帧更新的逻辑都应在放在这里面,比如刚体的运算。

FixedUpdate的帧率是固定的,由FixedTimestepd的值决定,路径:Edit->ProjectSetting->Time->FixedTimestep。但每一帧的时间间隔不固定,如果每帧都有大量的运算,为了避免运算超时影响主帧(Update),逻辑运算受临界值MaximumAllowedTimestep控制,超出时间就会退出运算。

Update帧率不固定,会受到时间缩放的影响,会出现卡顿的情况。

调用FixedUpdate的频度常常超过Update。

每帧根据帧率高低可能多次调用也可能不调用,执行后立即开始物理计算和更新,做移动计算时无需使用Time.deltaTime

2.状态机周期(动画更新)

1.状态机更新(State Machine Update)

2.OnStateMachineEnter

挂载在一个动画图形上的状态机首次进入一个状态时的第一帧调用

3.OnStateMachineExit

退出状态的最后一帧调用

4.处理图形

评估所有动画图形

5.触发动画事件 (Fire Animation Events)

在该时间内当前帧和最后一帧之间,触发所有动画片段的动画事件

6.状态周期回调 StateMachineBehaviour(OnStateEnter/OnStateUpdate/OnStateExit) 

一个状态层有最多三个活跃状态,current state, interrupted state, and next state(当前状态、中断状态和下一个状态。),对应阶段周期方法顺序执行

3.内部物理更新

4.状态机周期(动画更新)

1.处理动画

渲染动画结果图形

2.IK动画周期(OnAnimatorIK)

设置动画 IK。为每个启用 IK pass 的 Animator Controller 层进行一次此调用。

由workthread写入Transform

3.写入属性

由主线程写入场景其他动画属性

5.碰撞事件(Collision、Trigger)

6.协程(yield WaitForFixedUpdate)

在所有脚本的FixedUpdated执行后再执行

3.输入事件

Input events

1.OnMouseXXX

4.游戏逻辑

Game logic

1.update

每一帧进行调用,是实现游戏逻辑的主要方法。

2.协程

除WaitForFixedUpdate和WaitForEndOfFrame其他协程时机

3.状态机周期(动画更新)

同物理计算阶段过程,单无内部物理更新

4.lateupdate

开始时update的计算都已完成,一普遍用法是相机跟随,update中对人物移动的计算已全部完成,此时在lateupdate中更新相机位置

5.场景渲染

Scene rendering

1.OnWillRenderObject

若物体可见则每个相机调用一次

2.OnPreCull

相机剔除动作前

在摄像机剔除场景之前调用。剔除操作将确定摄像机可以看到哪些对象。正好在进行剔除之前调用 OnPreCull。

3.OnBecameVisible/OnBecameInvisible

对任何相机可见/不可见时调用

4.OnPreRender

相机渲染前

5.OnRenderObject

所有常规场景渲染完成时,可在此绘制自定义几何图形

此时,可以使用 GL 类或 Graphics.DrawMeshNow 来绘制自定义几何形状。

6.OnPostRender

当一个相机渲染完场景后

7.OnRenderImage

场景渲染后,可对Image做后期处理(滤镜)

6.Gizmo 渲染

Gizmo rendering

1.OnDrawGizmos

仅在editor

用于在场景视图中绘制辅助图标以实现可视化。

7.GUI渲染

GUI rendering

1.OnGUI 每帧多次调用

每帧调用多次以响应 GUI 事件。首先处理布局和重新绘制事件,然后为每个输入事件处理布局和键盘/鼠标事件。

8.帧结束

1.yield WaitForEndOfFrame

End of frame

协程是一个可暂停执行 (yield) 直到给定的 YieldInstruction 达到完成状态的函数。 协程的不同用法:

·yield: 在下一帧上调用所有 Update 函数后,协程将继续。

·yield WaitForSeconds: 在为帧调用所有 Update 函数后,在指定的时间延迟后继续协程

·yield WaitForFixedUpdate: 在所有脚本上调用所有 FixedUpdate 后继续协程

·yield WWW: 在 WWW 下载完成后继续。

·yield StartCoroutine: 将协程链接起来,并会等待 MyFunc 协程先完成。

9.暂停

Pausing

1.OnApplicationPause

一帧最后时调用,调用后会再触发一帧以刷新图像和切换暂停状态

10.退出/销毁

Decommissioning

1.OnApplicationQuit

在退出应用程序之前在所有游戏对象上调用此函数。

在编辑器中,用户停止播放模式时,调用函数。

2.OnDisable

在对象被取消活跃状态的时候响应,与OnEable相对应。

3.OnDestroy

当一个被激活的对象被销毁的时候调用,未被激活的对象被销毁则不会调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容