Unity 对象池
来源:互联网 发布:制作mv视频软件 编辑:程序博客网 时间:2024/05/23 20:17
1.设计一个PoolManage思路: 已经加载在内存的物体,等下可能还要重复使用,通常的思路是想没用就destroy掉。在c++里面还好,用的是智能指针(高效率),不用考虑GC问题。但是在C#中要考虑 :GC回收问题。所以通常做法可以把它放在一个池子里面。等下次要用的时候再取出来。
所以有了:
第一步思路:private List _dormantObjects = new List(); //暂时包括可以存储不同类型的NPC游戏物体。
第二步思路:现在要考虑生成出来的物体:
publicGameObjectSpawnObject(GameObject_obj){GameObjecttempObject =null;if(_dormantObject.Count > 0){foreach(varobjin_dormantObject){if(obj.name == _obj.name)//如果池子有就直接获取,并移除池子里面对应的元素{tempObject = obj;_dormantObject.Remove(tempObject);returntempObject;}}}// 如果对象池里面没有就重新加载一个tempObject =GameObject.Instantiate(_obj)asGameObject;tempObject.name = _obj.name;returntempObject;}
第三步思路:生成的东西不用的时候放在池子里面。
publicGameObjectPoolManager;//父亲节点,把物体放在该空物体下面publicvoidDeSpawnObject(GameObject_object){_object.transform.parent = PoolManager.transform;_object.SetActive(false);_dormantObject.Add(_object);}
第四步:Npc物体不可能有无限大,所以设置一个最大的容量,当超过的时候就把对应先进到池子的就要移除。
publicint_Capacity;publicvoidTrimUnLiveObject(){while(_dormantObject.Count > _Capacity){GameObject_obj = _dormantObject[0];_dormantObject.RemoveAt(0);Destroy(_obj);}}
第五步:
现在这个基本完成对象池的概念:
但是还有几个问题:
1.这个池子没有能力控制自己的加载和卸载:此时就需要一个管理器。
2.完成了只有休眠的物体(active= false)的管理,(active = true)也需要管理起来。
3.在第四步上的设置了最大容量的_Capacity,但是假使场景有很多不同类型的NPC类型,但是在池子中某一种的NPC对应的对象比较多,这就导致其它的npc占得比较少。这样就可以把它们的类型分开。
针对以上设计:PoolManager池子管理(最顶层):下一层不同类型的池子SpawnPool(不同类型的池子),最底层 每一个NPC预制体Pool。层次如下
PoolManager—–>SpawnPool2——>PrefabsPool2(可多个)—->Prefabs2。
然后就可以制作一个对象池的基本流程.
0 0
- [Unity优化]对象池
- unity中对象池
- Unity ----- 对象池GameObjectPool
- Unity 对象池
- 【Unity 教程】对象池
- unity 对象池技术
- unity 对象池
- unity 对象池编写
- Unity关于对象池
- UNITY之对象池
- Unity对象池
- Unity 对象池
- Unity-对象池
- Unity对象池技术
- 【unity&文章】对象池
- unity的对象池
- unity对象池
- Unity简易对象池
- 【Spring-web】AsyncRestTemplate源码学习_0
- 3.21.1、BI之SSIS之数据流转换(渐变维度-混合模式)
- 理想的 huge page
- 创业公司做数据分析(六)数据仓库的建设
- h第一个程序 As 使用RenderScripted
- Unity 对象池
- spring cloud-Feign使用中遇到的问题总结
- 51NOD _ 1284 2 3 5 7的倍数
- 【t075】郁闷的记者
- Android RadioButton 单选按钮
- #“Machine Learning”(Andrew Ng)#Week 2_2:Normal Equation
- bootstrap 1-导航条和下拉菜单
- 《爱上Processing》教学笔记(六)
- Leetcode 15. 3Sum