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
最新文章
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛
- IO多路复用之epoll总结
- python线程池实现
- COGS1008. 贪婪大陆[树状数组 模型转换]
- Django用已有的数据库
- STM32与FreeRTOS实现低功耗
- Eclipse自动打开实现类原型的工具
- css布局多列等高
- 【JAVA】 @override报错的解决方法
- Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue【3】
- sql like 查询
- Robot Framework-Windows版本安装
- iOS 中不同的modalPresentationStyle对parent view 的影响
- const 那点事儿
- hash算法与hashmap
- DIV内文字两端对齐
- 应用MySQL(开启远程登录权限)
- 表table
- 详解 ESLint 规则,规范你的代码
- Win10系列:UWP界面布局进阶2
热门文章
- Mybatis 的连接池技术
- 006_go语言中的if else条件语句
- 用Python做一个简单的翻译工具
- 利用mybatis的Generator的插件生成代码
- 补充的javascript 数据类型笔记
- 使用免费证书安装 ipa 到真机
- C#LeetCode刷题之#598-范围求和 II​​​​​​​(Range Addition II)
- Java实现经典七大经典排序算法
- VulnHub靶场学习_HA: Chakravyuh
- 微信小程序setData局部刷新列表