首先明确对象池中的一些元素:1,预设 2,集合 3,名字标识 4构造
using System;
using System.Collections.Generic;
using UnityEngine;
using System.Text;
public class SubPool
{
//预设
GameObject m_perfab;
//集合
List<GameObject> m_objects = new List<GameObject>();
//名字标识
public String Name
{
get
{
return m_perfab.name;
}
}
//构造
public SubPool(GameObject perfab)
{
this.m_perfab = perfab;
}
//取对象
public GameObject OnSpwan()
{
GameObject go = null;
foreach(GameObject item in m_objects)
{
if(!item.activeSelf)
{
go = item;
break;
}
}
if(go==null)
{
go = GameObject.Instantiate<GameObject>(m_perfab);
m_objects.Add(go);
}
go.SetActive(true);
go.SendMessage("OnSpwan", SendMessageOptions.DontRequireReceiver);
return go;
}
//回收对象
public void OnUnSpwan(GameObject go)
{
if(Contains(go))
{
go.SendMessage("OnUnSpawn", SendMessageOptions.DontRequireReceiver);
go.SetActive(false);
}
}
//回收该对象池所有对象
public void SwpanAll()
{
foreach(GameObject item in m_objects)
{
if(item.activeSelf)
{
OnUnSpwan(item);
}
}
}
//是否包含在对象池中
public bool Contains(GameObject go)
{
return m_objects.Contains(go);
}
}