【Unity开发】简单的对象池实现
2015-12-03 21:10
537 查看
using UnityEngine; using System.Collections; using System.Collections.Generic; public class ObjectPool : MonoBehaviour { //定义一个池子,里面存的是对象名字,以及游戏对象 Dictionary<string, List<GameObject>> pool = new Dictionary<string, List<GameObject>>(); //定义单例,方便调用 public static ObjectPool _instance; void Awake() { _instance = this; } //存对象的方法(当物体需要消除的时候调用,类似Destroy) public void ReturnPool(GameObject go) { //获取对象名 string name = go.name; if (pool.ContainsKey(name)) { //当池中有该对象时,直接添加 pool[name].Add(go); } else { //当大池中没有该对象池时,实例化一个池子 pool.Add(name, new List<GameObject>() { go }); } //隐藏对象 go.SetActive(false); } //取对象的方法(实例化物体的时候调用,类似Instantiate) public GameObject GetFromPool(string name, Vector3 p, Quaternion q) { GameObject go; //存克隆后的名字(后加(Clone)) string prefabName = name + "(Clone)"; //当对象大池中有该对象池,且其中存的对象数量大于0,直接取对象 if (pool.ContainsKey(prefabName) && pool[prefabName].Count > 0) { //获取池中对象 go = pool[prefabName][0]; //取到后从池中移除该对象 pool[prefabName].RemoveAt(0); //设置显隐以及位置坐标 go.SetActive(true); go.transform.position = p; go.transform.rotation = q; } else { go = Instantiate(Resources.Load(name), p, q) as GameObject; } return go; } }
相关文章推荐
- Unity3d+ShareSDK+IOS9.1 编译错误(备忘)
- Unity局部高效实时阴影的思考和实现
- Unity中的输入
- UNITY 2D入门基础教程
- Unity光照贴图
- Unity3D UGUI中Rect Transform的特性
- Unity血条实现
- Unity性能优化-内存优化
- Unity-NGUI不规则点击碰撞处理
- unity3d 根据tag查找物体编辑器工具
- Unity : Ran out of trampolines of type 2
- Unity性能优化-GPU优化
- Unity3D下NGUI插件使用中文TrueTypeFont(ttf)字库教程
- Unity3D Android手机开发环境配置,可真机发布调试
- Unity嵌入Android后Android视图获取不到事件焦点
- unity3d 发布后动态修改地形高度源码
- Unity 通过 www 下载 assetbundle , 在 iOS9 设备无法下载的问题
- unity3d利用sharesdk分享内容至微信、新浪微博、qq空间等国内主流社交平台(ios篇)
- Unity性能优化-总篇
- Unity5的uGUI中实现文字渐变效果(Gradient)