简单实现缓存池

学习笔记
在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pool2 : MonoBehaviour
{

 public static Pool2 instance;
private GameObject m_FatherObject;//父物体把实例化的物体放入父物体下
private void Awake()
{
    instance = this;
    if(m_FatherObject==null)
    {
        m_FatherObject = new GameObject("father");
    }
}
Dictionary<string, List<GameObject>> pooldic = new Dictionary<string, List<GameObject>>();
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        GetObj("Pool2/Cube");

    }
    if (Input.GetMouseButtonDown(1))
    {
        GetObj("Pool2/Sphere");          
    }
}
/// <summary>
/// 往缓存池放入
/// </summary>
public void PushObj(string name,GameObject obj)
{
    obj.SetActive(false);
    obj.transform.parent = m_FatherObject.transform;
    if (pooldic.ContainsKey(name))
    {
        //如果有抽屉
        pooldic[name].Add(obj);
    }
    else
    {
        //如果没有抽屉
        pooldic.Add(name,new List<GameObject>() { obj});
    }
}
/// <summary>
/// 往外拿物体
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public GameObject GetObj(string name)
{
    GameObject obj = null;
    //如果有物体
    if(pooldic.ContainsKey(name)&&pooldic[name].Count>0)
    {
        obj = pooldic[name][0];
        pooldic[name].RemoveAt(0);
    }else
    {
        //如果没有
        obj = GameObject.Instantiate(Resources.Load<GameObject>(name));
        obj.name = name;
    }
    obj.transform.parent = null;
    obj.SetActive(true);
   
    return obj;
}
 /// <summary>
/// 在跳转场景时清除字典
/// </summary>
public void Clear()
{
    pooldic.Clear();
}

}

测试脚本:
一、取出

    void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
     GetObj("Pool2/Cube");
    }
    if (Input.GetMouseButtonDown(1))
    {
        GetObj("Pool2/Sphere");          
    }
}

二、放入
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PoolObject2 : MonoBehaviour {

private void OnEnable()
{
    Invoke("PushObj",1f);
}
void PushObj()
{
    Pool2.instance.PushObj(this.gameObject.name, this.gameObject);
}

}
这个脚本是放到需要实例化预制体上,用时间测试放入是否可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值