Unity对象池使用
来源:互联网 发布:网络男主播 编辑:程序博客网 时间:2024/05/21 22:47
1.Unity对象池使用
对象池适用于场景中需要大量重复构造实例的时候
最直接的比如 发射的炮弹
思路构造出一个存储对象的池子 来存入或者取出池子中的对象 用的时候取出来 不用的时候放回去
此处池子中的对象就是炮弹
核心代码分析
利用一个字典结构来充当这个池子 ArrayList相当于池子中的每个小房间 Key相当于房间的名字 表示房间里边是什么东西 每个小房间用来存储的同一类的东西
private static Dictionarystring, ArrayList> pool = new Dictionarystring, ArrayList>();
按照正常思路思考 先要从对象池中取出一个炮弹,如果有炮弹 则取出 如果没有则实例化一个炮弹出来
public Object Get(string prefabName,Vector3 positon,Quaternion rotation) { string key = prefabName + "(Clone)"; Object o; //判断这个池子是否已经有这个键(存储炮弹的房间) 并且房间里边有炮弹 if (pool.ContainsKey(key) && pool[key].Count > 0) { ArrayList list = pool[key]; o = list[0] as Object; list.RemoveAt(0); //重新初始化相关状态 开始干活 (o as GameObject).SetActive(true); (o as GameObject).transform.position=positon; (o as GameObject).transform.rotation=rotation; } //没有存储炮弹的房间 实例化出一个新的炮弹 else { o = Instantiate(Resources.Load(prefabName), positon, rotation); } DelayDestory dd = (o as GameObject).GetComponent<DelayDestory>(); dd.Init();//开启携程 两秒后销毁 回到房间 return o; }
//放进去炮弹 (什么时机放进去呢 不用的时候就放进去就是你要销毁的时候) public Object Return(GameObject o) { string key = o.name; print("return:"+key); //判断这个池子是否已经有这个键(存储炮弹的房间名字) if (pool.ContainsKey(key)) { //已经有炮弹房间 ArrayList list = pool[key]; //添加一个新的 list.Add(o); } else { //如果不存在炮弹房间 先开房 开房当然有第一个客人 o pool[key] = new ArrayList() { o }; } //回房间休息状态 o.SetActive(false); return o; }
//对象的延迟销毁脚本public class DelayDestory : MonoBehaviour { // Use this for initialization void Start () { //Destroy(this.gameObject,2f); } public void Init() { StartCoroutine(ReturnToPool()); } IEnumerator ReturnToPool() { yield return new WaitForSeconds(2f); ObjectPool.insatance.Return(this.gameObject); }}
完整Unity工程:链接: https://pan.baidu.com/s/1pLBSl7P 密码: ttjc
阅读全文
0 0
- Unity对象池使用
- Unity 对象池简单使用
- unity对象池的使用
- Unity关于对象池的使用
- unity中对象池的使用
- Unity关于对象池的使用
- PoolManager 对象池插件(Unity)的使用
- Unity中对象池的使用
- [Unity优化]对象池
- unity中对象池
- Unity ----- 对象池GameObjectPool
- Unity 对象池
- 【Unity 教程】对象池
- unity 对象池技术
- unity 对象池
- unity 对象池编写
- Unity关于对象池
- UNITY之对象池
- RCU回顾
- Coursera deeplearning.ai 深度学习笔记3-Structuring Machine Learning Projects
- sqoop导入脚本
- SparkML模型选择(超参数调整)与调优
- SVN:客户端与服务器端安装、配置与使用
- Unity对象池使用
- Spring Cloud Feign 启动UnsatisfiedDependencyException
- java入门篇--字符串操作(下)
- 查看与修改网关,DNS
- python web 常用库
- python迭代器
- Backbone入门指南(一):什么是Backbone?
- 深入浅出地,彻彻底底地理解python中的编码
- ViewPager引导页(1)