欢迎来到天天文库
浏览记录
ID:39891100
大小:18.32 KB
页数:6页
时间:2019-07-14
《Unity3D游戏开发之对象池技术(优化)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Unity3D游戏开发之对象池技术(优化)我们在做项目的时候,如果同一个物体要用到好多次,我们就不要再用实例化了,因为每次创建一个新物体是很消耗资源的,引用对象池技术,顾名思义,把所有要用到的对象在初始化的时候都扔到这个池子里,想用的时候拿出来用,不想用的时候放回去,这样会大大节省资源,我在狗刨上看到一个写对象池不错的code,拿来分享一下。 这个脚本非常简单,但它可以通过大量减少实例化所带来的开销使我的iOS游戏得到很大的性能提升。 1.把脚本ObjectPool.cs链接到一个GameObject上。2.在物体预设数组中设置你想
2、要放到池中并重复利用的预设物体。3.在缓冲数组中,指定你希望每个物体在游戏开始时被实例化的数量,这样在开始的时候你就有了池对象。4.在你的游戏中调用ObjectPool.instance.GetObjectForType(objectType,onlyPooled)来使用它。objectType写你想生成的预设的名字、并为onlyPooled指定布尔值,如果返回真,它将返回你已经放到池中的对象;如果返回假,它将实例化一个全新的对象。(如果你想限制被池对象的数量,那么设定为真,这样做非常有用,尤其是在需要限制同时播放特效的数量的时候)。文
3、章出处【狗刨学习网】5.确保你从池中调用的对象知道当它被删除时需要返回到池中。1. 2.3.usingUnityEngine;4.usingSystem.Collections;5.usingSystem.Collections.Generic;6.7.publicclassObjectPool:MonoBehaviour8.{9.10. publicstaticObjectPoolinstance;11.12. ///13. ///Theobjectprefabswhichthepoolcanhandle.1
4、4. ///15. publicGameObject[]objectPrefabs;1.2. ///3. ///Thepooledobjectscurrentlyavailable.4. ///5. publicList[]pooledObjects;6.7. ///8. ///Theamountofobjectsofeachtypetobuffer.9. ///10. publicint[]amo
5、untToBuffer;11.12. publicintdefaultBufferAmount=3;13.14. ///15. ///Thecontainerobjectthatwewillkeepunusedpooledobjectssowedontcloguptheeditorwithobjects.16. ///17. protectedGameObjectcontainerObject;18.19. voidAwake()20. {21. instance=this;
6、22. }23.24. //Usethisforinitialization25. voidStart()26. {27. containerObject=newGameObject("ObjectPool");28.29. //Loopthroughtheobjectprefabsandmakeanewlistforeachone.1. //Wedothisbecausethepoolcanonlysupportprefabssettoitintheeditor,2. //sowecan
7、assumethelistsofpooledobjectsareinthesameorderasobjectprefabsinthearray3. pooledObjects=newList[objectPrefabs.Length];4.5. inti=0;6. foreach(GameObjectobjectPrefabinobjectPrefabs)7. {8. pooledObjects[i]=newList(); 9.10.
8、 intbufferAmount;11.12. if(i
此文档下载收益归作者所有