对象池
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour {
//monster的模板
public GameObject mMonster;
//monster的对象池
private Stack monsterPool;
//在当前场景中正在使用的 激活的monster
private Stack activeMonsterPool;
// Use this for initialization
void Start () {
monsterPool = new Stack();
activeMonsterPool = new Stack();
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0))
{
//获取一个monster对象
GameObject monster = GetMonster();
monster.transform.position = Vector3.zero;
activeMonsterPool.Push(monster);
}
if (Input.GetMouseButtonDown(1))
{
if (activeMonsterPool.Count>0)
{
PushGameObjectToPool(activeMonsterPool.Pop());
}
}
}
/// <summary>
/// 获取一个monster
/// </summary>
/// <returns></returns>
private GameObject GetMonster()
{
GameObject monster = null;
if (monsterPool.Count > 0)
{
//池子中有对象
monster = monsterPool.Pop();
monster.SetActive(true);
}
else {
//对象池中没有对象
monster = Instantiate(mMonster);
}
return monster;
}
private void PushGameObjectToPool(GameObject monster)
{
monster.transform.SetParent(transform);
monster.SetActive(false);
monsterPool.Push(monster);
}
}