对象池代码

using System.Collections.Generic;

using UnityEngine;

/// <summary>
/// 对象池
/// </summary>
public class ObjectPool : MonoBehaviour
{
    //使用单例模式
    public static ObjectPool Instance;
    public GameObject prafab;//被实例的对象
    public GameObject parent;//父物体
    private Queue<GameObject> pools = new Queue<GameObject>();//存放对象的池

    private void Awake()
    {
        if (Instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            Instance = this;
        }
    }


    void Start()
    {
        //从Resources中获取物体
        prafab = Resources.Load<GameObject>("Black holes");
        //设置父物体
        parent = this.transform;
        InitPool(10, prafab);
    }

    /// <summary>
    /// 初始化对象池
    /// </summary>
    /// <param name="_count">数量</param>
    /// <param name="obj">要被实例对象</param>
    public void InitPool(int _count, GameObject obj)
    {
        for (int i = 0; i < _count; i++)
        {
            GameObject go = Instantiate(obj);//实例化对象
            go.SetActive(false);//隐藏对象
            go.transform.SetParent(parent);//设置父类
            pools.Enqueue(go);//放入对象池
        }
    }

    /// <summary>
    /// 从对象池拿取对象
    /// </summary>
    /// <returns>对象</returns>
    public GameObject GetObjectToPool()
    {
        //如果对象池还有对象
        if (pools.Count > 0)
        {
            GameObject go = pools.Dequeue();//从对象池拿出对象
            go.transform.SetParent(null);//清空父类
            go.SetActive(true);//显示对象
            return go;
        }

        //如果对象池里没有对象了
        return null;
    }

    /// <summary>
    /// 把对象放回对象池
    /// </summary>
    /// <param name="obj">要放回的对象</param>
    public void BackToPool(GameObject obj)
    {
        obj.SetActive(false);//隐藏对象
        obj.transform.position = Vector3.zero;//坐标清零
        obj.transform.SetParent(parent);//设置父类
        pools.Enqueue(obj);//放入对象池
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值