Unity脚本生命周期

写这个博文的主要目的是让自己对Unity的脚本生命周期能有一个更深入的理解。  文中借鉴别处资料,请忽喷~

Unity脚本生命周期常用函数执行顺序

         Awake ->OnEnable-> Start ->-> FixedUpdate-> Update  -> LateUpdate  -> OnDisable ->OnDestroy


首先一张图让人对Unity的脚本生命周期一目了然!



常用函数详细说明

1. Reset:在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。

Reset最常用于在检视面板中给定一个默认值。

2. Awake:用于在游戏开始之前初始化变量或游戏状态在脚本整个生命周期内它仅被调用一次

Awake在所对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如

GameObject.FindWithTag()这样的函数搜它们。每个游戏物体上的Awake以随机的顺序被调用。

因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。

它不能用来执行协同程序。

3. Start:仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。

它和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码。

Awake总是在Start之前执行。这允许你协调初始化顺序。在所有脚本实例中,Start函数总是在Awake函数之后调用。

4. FixedUpdate:固定帧更新,在Unity导航菜单栏中,点击“Edit”-->“Project Setting”-->

“Time”菜单项后,右侧的Inspector视图将弹出时间管理器,其中“Fixed Timestep”选项用于

设置FixedUpdate()的更新频率,更新频率默认为0.02s。

5.Update:正常帧更新,用于更新逻辑。每一帧都执行,处理Rigidbody时,

需要用FixedUpdate代替Update。

例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。

(两者帧长不同)FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染

帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适

用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。

6.LateUpdate:在所有Update函数调用后被调用,和fixedupdate一样都是每一帧都被调用执行,

这可用于调整脚本执行顺序。

例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。

LateUpdate,在每帧Update执行完毕调用,他是在所有update结束后才调用,

比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有update

操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

7.OnGUI:在渲染和处理GUI事件时调用。比如:你画一个button或label时常常用到它。

这意味着OnGUI也是每帧执行一次。

8. OnDisable:当物体被销毁时 OnDisable将被调用,并且可用于任意清理代码。

脚本被卸载时,OnDisable将被调用,OnEnable在脚本被载入后调用。

注意: OnDisable不能用于协同程序。

9. OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。

OnDestroy只会在预先已经被激活的游戏物体上被调用。注意:OnDestroy也不能用于协同程序。


渲染相关

OnPreCull: 在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除前。

OnBecameVisible/OnBecameInvisible: 在对象对于相机可见/不可见时调用此函数。

OnWillRenderObject: 如果对象可见,则为每个相机调用一次此函数。 

OnPreRender: 在相机开始渲染场景之前调用此函数。

OnRenderObject: 在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。

OnPostRender: 在相机完成场景渲染后调用此函数。

OnRenderImage(仅限专业版): 在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。

OnGUI: 在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和         keyboard/鼠标事件。

OnDrawGizmos: 用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的

参考资料:

1.Execution Order of Event Functions  http://docs.unity3d.com/Manual/ExecutionOrder.html
2.游戏蛮牛Unity 用户文档1.0  http://www.unitymanual.com/m/Manual/index.htm

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值