简单实现对象池
来源:互联网 发布:potplayermini优化版 编辑:程序博客网 时间:2024/06/04 17:44
对象池的关键代码:
public class ObjectPoolManager{ // 多一对象池 private Dictionary<string, List<GameObject>> dicPools; // #region 单例 private static ObjectPoolManager instance; public static ObjectPoolManager Instance { get { if (instance == null) { instance = new ObjectPoolManager(); } return instance; } } private ObjectPoolManager() { dicPools = new Dictionary<string, List<GameObject>>(); } #endregion // 从对象池中实例化物体 public GameObject Instanciate(GameObject prefab) { GameObject result; // 根据prefab.name判断对象池里是否有该游戏对象,并且个数大于零 if (dicPools.ContainsKey(prefab.name) && dicPools[prefab.name].Count > 0) { result = dicPools[prefab.name][0]; dicPools[prefab.name].Remove(dicPools[prefab.name][0]); result.SetActive(true); return result; } else { // 最开始执行一定是先执行下面的代码,设定好对象池中游戏的名字 result = MonoBehaviour.Instantiate(prefab) as GameObject; result.name = prefab.name; return result; } } // 将消失的物体放回对象池 public void DestroyObj(GameObject prefab) { prefab.SetActive(false); if (!dicPools.ContainsKey(prefab.name)) { dicPools[prefab.name] = new List<GameObject>(); } dicPools[prefab.name].Add(prefab); }}挂载在对象池游戏对象上:
public class CubeDestroy : MonoBehaviour{ void OnEnable() { StartCoroutine("MyDestroy"); } IEnumerator MyDestroy() { yield return new WaitForSeconds(2); ObjectPoolManager.Instance.DestroyObj(gameObject); }}
测试代码:
public class GameCtrl : MonoBehaviour{ public GameObject cubePrefab; public GameObject spherePrefab; void Update() { if (Input.GetMouseButtonDown(0)) { ObjectPoolManager.Instance.Instanciate(cubePrefab); } if (Input.GetMouseButtonDown(1)) { ObjectPoolManager.Instance.Instanciate(spherePrefab); } }}
阅读全文
0 0
- 简单实现对象池
- 简单的对象池实现
- C++实现简单的对象池
- 简单的对象池技术实现 DEMO
- 【Unity开发】简单的对象池实现
- Java对象池的简单实现
- C++通过list和template实现简单的对象池
- C++通过list和template实现简单的对象池
- 通过重载new和delete实现简单的对象池
- 通过重载new和delete实现简单的对象池
- 【Unity3D 打斗游戏开发】之三 简单实现对象池
- 简单对象池
- 对象池简单理解
- PHP:简单实现ASP的Application对象
- Objective-C 对象复制 简单实现
- C++简单实现对象引用计数示例
- 实现对象深拷贝的简单案例
- lua的简单对象实现以及简单继承
- EmailUtils--QQ
- 如何解决高并发下缓存被击穿的问题
- Python help
- 聚簇索引与非聚簇索引的区别
- MySQL 之三范式
- 简单实现对象池
- 十分钟看懂图像语义分割技术
- Array Partition I(leetcode)
- bzoj3791 作业
- PyTorch:Mark一下找到的一些入门资源合集
- Java数据结构与算法解析(十三)——优先级队列
- 八种通用寄存器
- Request 对象和Response 对象
- 图片轮播不带圆点