Unity 对象池

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

public class ObjectPool : MonoBehaviour {

public static ObjectPool _instance;

public static Dictionary<string, ArrayList> Pool = new Dictionary<string, ArrayList>();

void Awake()

{

_instance = this;

}

public Object GetObject(string PrefabName,Vector3 position,Quaternion rotation,Transform Parent)//重对象池获取对象

{

string objectname = PrefabName + "Clone";

GameObject go = null;

if (Pool.ContainsKey(objectname) && Pool[objectname].Count > 0)

{

ArrayList list = Pool[objectname];

go = (GameObject)list[0];

list.Remove(0);

go.SetActive(true);

go.transform.parent = Parent;

go.transform.position = position;

go.transform.rotation = rotation;

}

else

{

go = Instantiate(Resources.Load(PrefabName), position, rotation) as GameObject;

go.transform.parent = Parent;

}

return go;

}

public static GameObject AddObject(GameObject g)

{

//获取gameobject的名字,会是一个在上面get方法里创建的(预设体的)gameobject,名字会是gameobject(Clone);

string key = g.name;

//如果字典里有这个key

if (Pool.ContainsKey(key))

{ //就在这个key所对应的数组中加入这个g (这个g就是已经用完的子弹,放到这个数组里的gameobjet都是不销毁只是取消激活等待再次利用的gameobject)

Pool[key].Add(g);

}

//如果没有这个key

else

{

//建立一个这个key的arraylist 并把g加进去

Pool[key] = new ArrayList() { g };

}

//不销毁而是取消激活

g.SetActive(false);

//返回g

return g;

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 实现对象池的步骤 代码 该脚本可以添加到创建的空物体身上,注意游戏场景中必须要有带有碰撞器的对象存在,不然,...
    iconn阅读 1,330评论 1赞 21
  • unity在创建物体后(申请内存),删除,内存中没有立刻释放,只是将引用取消掉. 缓存池: 优点:减少内存消耗,优...
    祝你万事顺利阅读 566评论 0赞 0
  • 在网上看见了对象池的一些应用,一直很好奇,所以来研究一下 对象池主要的用途就是在那些需要重复被创建和销毁的物体上可...
    楚天月阅读 417评论 0赞 1
  • 本节通过一个简单的射击子弹的示例来介绍Transform的用法。子弹射击本身很容易制作,只要制作一个子弹Prefa...
    OneMore2018阅读 683评论 0赞 2
  • 问候最有激情、最有能量、最爱学习的第2期自律小白训练营的伙伴们。大家早上好! 非常感谢天哥宫班所创建的哲课终身教育...
    周成义阅读 417评论 0赞 1

友情链接更多精彩内容