最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
UNity3d做手机游戏对象池应用
我找到一篇关于 Unity3D 做手机游戏对象池应用的文章,在此分享给大家。
脚本效果
原作者提到:“The script is really simple but it has helped the performance in my iOS game tremendously by limiting the number of instantiations that happen at runtime.”
这个脚本非常简单,但通过大量减少运行时实例化所带来的开销,能显著提升 iOS 游戏的性能。
对象池的作用
原作者描述:“The object pool allow you to buffer or pool objects you plan on reusing many time throughout your game, by allowing you to request a new object from it, and tell it whether or not it must give you an object or only give you an object thats available. It also buffers objects at the start to give you a pool to work with initially.”
对象池可以缓存那些计划在游戏中多次重复利用的对象。它允许你从中请求新对象,并能判断是必须为你提供对象,还是仅提供可用的对象。在游戏开始时,对象池会缓存一定数量的对象,为后续的使用提供一个对象池。
对象池的使用方法
1. 挂载脚本
将 ObjectPool.cs 脚本挂载到一个 GameObject 上。
2. 设置预设物体
在物体预设数组中,设置你想要放入对象池并在游戏中重复利用的预设物体。
3. 指定实例化数量
在缓冲数组中,指定每个物体在游戏场景开始时希望被实例化的数量。这样在游戏开始时,你就拥有了一定数量的池对象。如果不进行具体指定,将使用默认的缓冲数量。
4. 调用对象池方法
在游戏代码中调用 ObjectPool.instance.GetObjectForType(objectType, onlyPooled) 方法。其中,objectType 填写你想生成的预设的名称;onlyPooled 为布尔值:
- 若为
true,只有当对象池中有可用对象时才会返回该对象; - 若为
false,当对象池没有可用对象时,会实例化一个新对象。
当你希望限制对象池中的对象数量时,将 onlyPooled 设置为 true 非常有用,例如在需要限制同时播放特效数量的场景中。
5. 对象返回池操作
确保从对象池中获取的 GameObject 知道在被移除时如何将自身重新放回对象池。
其他脚本说明
原作者还提供了 Effect.cs 和 SoundEffect.cs 脚本,并应用到了自己的游戏中。
- Effect.cs:需要挂载到一个
GameObject上,并添加若干粒子发射器。每次调用StartEffect方法时,粒子发射器仅发射一次。在设定的时间过后,它会重置特效并将自身放回对象池。 - SoundEffect.cs:功能与
Effect.cs类似,不过是应用在音效方面。
总结
原作者表示:“I hope this can help people out who need to limit the number of instantiate calls made with reusable objects.”
希望这些内容能帮助到那些需要限制可重复使用对象实例化调用次数的开发者。
截图地址
下面的截图我无法转载,所以留下地址: http://www.liyunpeng.cn/post/2014-08-29/40062790120