C# 对象池

C# 对象池

using System.Collections.Generic;
using UnityEngine;

public class ObjectPool : MonoSingle<ObjectPool>
{
   
    //创建一个池子来存储这些对象(用字典的形式来区分不同类型)
    //key用来存池子名称,value用list存游戏对象
    public IDictionary<string,List<GameObject>> pool;
    //实例化对象池
    public ObjectPool()
    {
        pool = new Dictionary<string, List<GameObject>> ();
        // pool.Clear();
    }
    
    /// <summary>
    /// 获取对象
    /// </summary>
    public GameObject GetObj(string objName)
    {
        //要获取的对象
        GameObject currentObj=null;
        //判断是否有该类型的对象池,如果包含这个对象池
        if(pool.ContainsKey(objName))
        {
            Debug.Log("getObj: " + objName);
            //再判断对象池中是否有东西
            if(pool[objName].Count>0)
            {
                //获取当前对象
                currentObj=pool[objName][0];//从第0号开始
                //从池中移除
                pool[objName].Remove(currentObj);
            }
        }
        //如果没有该类型对象池
        //如果对象为空
        if (currentObj == null) 
        {
            //找一个继承mono的单例
            currentObj = GameMgr.Instance.loadObj (objName);
        }
        // currentObj.transform.position = pos;
        // currentObj.transform.rotation = qua;
        //激活对象
        currentObj.SetActive(true);
        return currentObj;
    }


    /// <summary>
    /// 保存对象
    /// </summary>
    public void SetObj(GameObject go)
    {
        //取消激活对象
        //对象要进入对象池里,不要对游戏产生影响,所以先设置为非激活
        go.SetActive (false);
        //获取对象池名称
        //replace(替换)把带有clone的文件替换
        string objPoolName = go.name.Replace ("(Clone)", "");
        Debug.Log("name: " + objPoolName);
        //判断这个池子里是否有存在
        //如果该类型的对象池存在
        if (pool.ContainsKey (objPoolName)) 
        {
            //将对象保存到对象池
            pool [objPoolName].Add (go);
            
        }
        //否则该类型的对象池不存在
        else 
        {
            //创建对象池,并保存对象到对象池
            pool.Add(objPoolName,new List<GameObject>(){go});
        }

    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值