• MonoBehaviour生命周期与对象数据池应用


     

    预热游戏对象:

    tempObject = Instantiate(cubePrefab) as GameObject ;

    tempObject .SetActive( false );

    游戏对象tempObject调用三个方法:

    Awake()、OnEnable()、OnDisable()

     

    暂停游戏,启用游戏对象:

    游戏对象tempObject调用如下几个方法:

    OnEnable()、Start()、OnGUI()(连续调用2次)、OnWillRenderObject()

    补充:

    OnGUI():在游戏暂停状态下,每次快速点击鼠标,会连续6次调用该方法,慢速移动鼠标,会连续2次调用该方法。

    OnWillRenderObject():在游戏暂停状态下,每次快速点击键盘,会连续2次调用该方法。

    OnWillRenderObject调用次数还受摄像机数量影响

     

    播放下一帧:

    游戏对象tempObject调用如下几个方法:

    FixedUpdate()、Update()、LateUpdate()、OnGui(连续调用2次)、OnWillRenderObject()

     

    之后每一帧均重复如上

     

    再次禁用游戏对象:

    游戏对象tempObject调用如下方法:

    OnDisable()

     

    再次启用游戏对象:

    游戏对象tempObject调用如下方法:

    OnEnable()、OnGUI(连续调用2次)、OnWillRenderObject()

     

    结论1:初始化游戏对象后立即禁用游戏对象,初始化方法中仅执行Awake()方法和OnEnable()方法。由于在整个实验过程中,Awake()仅执行一次,因此可在此处进行资源的预加载

    结论2:Start()方法如果在一开始没有执行,则在Enable()时会执行一次,且仅会执行一次。目前没有想到比较好的应用场景。

    结论3:OnEnable()方法在游戏对象创建及每次启用的时候都会执行,结合对象数据池,比较用作适合游戏对象的数据初始化。

    结论4:在OnDisable()方法中对游戏对象的数据进行重置,称为立即重置。在OnEnable()方法中对游戏对象的数据进行重置,称为使用时重置。

    参考资料:

    Simple Reusable Object Pool - Help limit your instantiations!

    http://forum.unity3d.com/threads/simple-reusable-object-pool-help-limit-your-instantiations.76851/#userconsent#

    C# Memory Management for Unity Developers (part 3 of 3)

    http://www.gamasutra.com/blogs/WendelinReich/20131127/203843/C_Memory_Management_for_Unity_Developers_part_3_of_3.php

  • 相关阅读:
    大数据实践解析(上):聊一聊spark的文件组织方式
    npm 项目更换目录后无法启动
    Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求
    Vue 爬坑之路(五)—— 组件进阶
    Vue 爬坑之路(四)—— 与 Vuex 的第一次接触
    Vue 爬坑之路(三)—— 使用 vue-router 跳转页面
    Vue 爬坑之路(二)—— 组件之间的数据传递
    Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目
    同步类的基础AbstractQueuedSynchronizer(AQS)
    由于不当的执行顺序导致的死锁
  • 原文地址:https://www.cnblogs.com/muxiaomo/p/4536895.html
Copyright © 2020-2023  润新知