预热游戏对象:

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

MonoBehaviour生命周期与对象数据池应用的更多相关文章

  1. MonoBehaviour生命周期

    MonoBehaviour生命周期 上图中重要的信息点很多,需要特别注意的是所有脚本的Awake方法都执行完才会执行Start,但是如果在Awake 中开启了一个协程这个协程中每一帧执行一些操作然后等 ...

  2. [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少分配率, 最重要的规则,缩短对象的生命周期,减少对象层次的深度,减少对象之间的引用,避免钉住对象(Pinning)

    减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检 ...

  3. Vue.js的指令、生命周期钩子与数据选项

    vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.常用指令 v-if ... v-else: 作用:控制元素是 ...

  4. Unity3D 中 脚本(MonoBehaviour) 生命周期WaitForEndOfFrame需要注意的地方

    首先看看MonoBehaviour的生命周期 先上个图(来源 http://blog.csdn.net/qitian67/article/details/18516503): 1.Awake 和 St ...

  5. Unity3D脚本(MonoBehaviour)生命周期

    场景中有2个物体:A,B 每一个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script ...

  6. 01_Activity生命周期及传递数据

    1. Activity的生命周期: 2. Activity启动另一个Activity,并传递数据: package com.example.activitydemo; import android.a ...

  7. react生命周期获取异步数据

    当react组件需要获取异步数据的时候,建议在ComponentDidMount周期里执行获取动作, 如果非异步数据,可以在ComponentWillMount获取 因为ComponentWillMo ...

  8. monobehaviour生命周期完整版

  9. [转]Java 对象锁-synchronized()与线程的状态与生命周期

      线程的状态与生命周期 Java 对象锁-synchronized() ? 1 2 3 4 synchronized(someObject){   //对象锁 } 对象锁的使用说明: 1.对象锁的返 ...

随机推荐

  1. 自定制格式化方式format

    自定制格式化方式format # x='{0}{0}{0}'.format('dog') # # print(x) # class Date: # def __init__(self,year,mon ...

  2. 网络安全传输系统-sprint2线程池技术优化

    part1:线程池工作原理 为满足多客户端可同时登陆的要求,服务器端必须实现并发工作方式.当服务器主进程持续等待客户端连接时,每连接上一个客户端都需一个单独的进程或线程处理客户端的任务.但考虑到多进程 ...

  3. CI4框架应用二 - 项目目录

    我们之前搭建好了CI4的开发环境,下面我们来看一下CI4的目录结构. Administrator@PC- MINGW64 /c/wamp64/www/ci4 $ ls -l total drwxr-x ...

  4. [POJ3783]Balls 题解

    题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...

  5. .netcore tif文件转jpg,并通过webapi返回

    网上能搜到很多关于c# tif转jpg的代码.最简单的就是下面这段获得转换后的图片图片对象.在netcore 中使用这段代码时由于netcore框架已经不自带System.Drawing命名空间了所有 ...

  6. 实验室外的攻防战 UOJ#180 [树状数组]

    实验室外的攻防战 UOJ#180 [树状数组] 题目 时针指向午夜十二点,约定的日子--2月28日终于到来了.随着一声枪响,伏特跳蚤国王率领着他的跳蚤大军们包围了 \(picks\) 博士所在的实验室 ...

  7. mysql-5.7.xx在lcentos7下的安装以及mysql在windows以及linux上的性能差异

    前言: 在centos上安装mysql,整整折腾了将近一天,因为是第一次安装,的确是踩了不少坑,这里详细记录下来,方便各位有同样需求的小伙伴参考. 该选择什么版本? mysql5.7有很多小版本,但是 ...

  8. Fiddler+模拟器+APP抓包HTTPS 为什么有时候抓不到?

    抓包的原理是什么? 代理 客户端请求 -> 经过代理 -> 到达服务端 服务端返回 -> 经过代理 -> 到达客户端 任何Https的App都能抓到包么? Android7.0 ...

  9. 封装Vue Element的table表格组件

    上周分享了几篇关于React组件封装方面的博文,这周就来分享几篇关于Vue组件封装方面的博文,也好让大家能更好地了解React和Vue在组件封装方面的区别. 在封装Vue组件时,我依旧会交叉使用函数式 ...

  10. QT下载速度慢的解决方法

    在官网的下载速度实在太慢了 找到了一个镜像网站 https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/