• 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

  • 相关阅读:
    (转)ANT与RTS的结合
    (转)[Android] 利用 ant 脚本修改项目包名
    (转)MULTIPLE TARGETS FROM ONE ANDROID SOURCE (THE BETTER WAY)
    JS+CSS打造网站头部蓝色简约可自动显示/隐藏的导航菜单
    CSS打造很棒的黑色背景下的导航菜单
    老外JS实现的Infinite Menus
    【荐】JavaScript打造的无限级可刷新树型折叠菜单
    【荐】纯CSS打造超酷的圆角菜单,鼠标移过向上/向下扩张
    来自阿里巴巴网的滑动TAB导航特效
    适用于商城JS实现的可折叠的商品分类导航
  • 原文地址:https://www.cnblogs.com/muxiaomo/p/4536895.html
Copyright © 2020-2023  润新知