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

时间: 2024-12-26 11:12:49

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

MonoBehaviour生命周期

MonoBehaviour生命周期 上图中重要的信息点很多,需要特别注意的是所有脚本的Awake方法都执行完才会执行Start,但是如果在Awake 中开启了一个协程这个协程中每一帧执行一些操作然后等待,那么Start方法执行是不会等待这个协程结束的,也就是说Start方法中的代码会比协程的代码结束早晚是不一定的.另外可以看到Unity中所有的方法都是在一个大循环里,所以协程只是换一个地方循环中的位置执行,并不是另一个线程. 在Unity脚本中,有一些按照预定顺序执行的事件函数,脚本即是按照此顺

Unity3D脚本(MonoBehaviour)生命周期分析

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 场景中有2个物体:A,B 每个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script : B , Message : OnEnable Object : A , Script : A

Unity3D脚本(MonoBehaviour)生命周期

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

01_Activity生命周期及传递数据

1. Activity的生命周期: 2. Activity启动另一个Activity,并传递数据: package com.example.activitydemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Ed

hibernate session缓存和java对象生命周期

一.java对象生命周期 1.在java中,使用new关键字,创建一个java对象,jvm就为这个对象分配一块内存空间.只要这个变量被引用,他就一直存在于内存中.如果没有被任何变量引用(包括间接引用),那么这个对象就会被垃圾回收器回收.下面用一段代码来解释: Customer c=new Customer(); Order o1=new Order(); Order 02=new Order(); o1.setCustomer(c); c.getOrders().add(o1); o1=null

六 领域驱动设计-领域对象的生命周期

目录 领域驱动设计-领域对象的生命周期 AGGREGATE FACTORY 领域驱动设计-领域对象的生命周期 每个对象都有生命周期,如图6-1所示.对象自创建后,可能会经历各种不同的状态,直至最终消亡--要么存档,要么删除.当然,很多对象是简单的临时对象,仅通过调用构造函数来创建,用来做一些计算,而后由垃圾收集器回收.这类对象没必要搞得那么复杂.但有些对象具有更长的生命周期,其中一部分时间不是在活动内存中度过的.它们与其他对象具有复杂的相互依赖性.它们会经历一些状态变化,在变化时要遵守一些固定规

Gradle 庖丁解牛(构建生命周期核心托付对象创建源代码浅析)

[工匠若水 http://blog.csdn.net/yanbober 未经同意严禁转载,请尊重作者劳动成果.私信联系我] 1 背景 上一篇<Gradle 庖丁解牛(构建源头源代码浅析)>我们分析了 Gradle 框架自身初始化(非构建生命周期初始化)的核心流程,这一篇我们续着前面的分析继续(假设没看过前一篇的建议先去看前一篇,由于这一系列存在非常高的关联性).上一篇说到当我们运行 gradle taskName 命令后经过一系列艰难的框架初始化终于走到了 DefaultGradleLaunc

Gradle 庖丁解牛(构建生命周期核心委托对象创建源码浅析)

[工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果.私信联系我] 1 背景 上一篇<Gradle 庖丁解牛(构建源头源码浅析)>我们分析了 Gradle 框架自身初始化(非构建生命周期初始化)的核心流程,这一篇我们续着前面的分析继续(如果没看过前一篇的建议先去看前一篇,因为这一系列存在非常高的关联性).上一篇说到当我们执行 gradle taskName 命令后经过一系列艰难的框架初始化最终走到了 DefaultGradleLaunch

&quot;过期不候&quot;--具备生命周期的数据的技术实现方案

"过期不候"--具备生命周期的数据的技术实现方案 1   引言 本文可以作为之前的一个 原理性文章 对应的 技术实现部分 . 此处给出其上文的直达电梯: http://www.cnblogs.com/beer/p/6029861.html 基于token的多平台身份认证架构设计 2   数据生命周期 所谓的 “数据生命周期” 是指:为数据设定一定的生存期限,过了这个时间后, 此数据就被删除掉(失效). 在进行web开发的时候,有很多需求场景是要求数据是具有一定的生命周期,比如: 具有一