对象池的简单使用

Posted zhaodadan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象池的简单使用相关的知识,希望对你有一定的参考价值。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DemoPool : MonoBehaviour {
    //要实例的物体
    public GameObject monsterPrefab;  
    //存放物体的对象池 未激活
    private List<GameObject> monsterList = new List<GameObject>();
    //激活
    private List<GameObject> monsterActiveList = new List<GameObject>();
    //父物体的位置
    public Transform[] parentPosition;
    	
	void Start () {

        //初始化生成3个物体
        for (int i = 0; i < 3; i++)
        {
            GameObject temp = Instantiate(monsterPrefab);
            temp.transform.SetParent(parentPosition[i], false);
            //设置激活状态  添加到未激活的List 中
            temp.SetActive(false);
            monsterList.Add(temp);
        }
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            ShowMonsterState();
        }
        if (Input.GetKeyDown(KeyCode.Q))
        {
            RecycleInitMonster();
        }
	}
    /// <summary>
    /// 拿到第0位 从未激活的List中移除
    /// </summary>
    private void ShowMonsterState()
    {
        if (monsterList.Count > 0)
        {
            GameObject temp = monsterList[0];
            temp.SetActive(true);
            monsterList.RemoveAt(0);
            //添加到激活的List 中
            monsterActiveList.Add(temp);
        }
        else
        {
            //如果对象池中的个数不够 就实例化 添加到激活的List 中
            GameObject temp = Instantiate(monsterPrefab);
            monsterActiveList.Add(temp);
        }
    }
    private void RecycleInitMonster()
    {
        if (monsterActiveList.Count > 0)
        {
            GameObject temp = monsterActiveList[0];
            monsterActiveList.RemoveAt(0);
            temp.SetActive(false);
            monsterList.Add(temp);
        }
    }

}

  

以上是关于对象池的简单使用的主要内容,如果未能解决你的问题,请参考以下文章

对象池的简单使用

闲来无事,为大伙分享一个对象池的编写

对象池的简单实现

Linux下简单线程池的实现

关于对象池技术的一些记录

数据库连接池的选择 | 实现