对象池使用场景:
游戏发射子弹,子弹不能是一直实例化,太消耗资源。
我们用对象池,Start时先孵化一些备用子弹, 发射时循环使用这些子弹。
下面 GetPipe() 代码就是获得第一颗、第二颗、第三颗、第四颗。。。第一颗这样的顺序。
代码:
代码语言:javascript复制using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
public static NewBehaviourScript instance;
private void Awake()
{
instance = this;
}
/*储存对象数组*/
public List<GameObject> Pipes;
/*生成对象个数*/
public int PipeAmount;
/*要生成对象的预制件*/
public GameObject Pipe;
/*贪心算法参数*/
int SuoYin = 0;
void Start()
{
/*将数组new出来*/
Pipes = new List<GameObject>();
/*孵化过程*/
for (int i = 0; i < PipeAmount; i )
{
GameObject PIPE = Instantiate(Pipe);
PIPE.SetActive(false);
/*生成对象放在固定位置子类*/
PIPE.transform.SetParent(this.transform);
/*生成对象存入数组*/
Pipes.Add(PIPE);
}
}
/*获得最新的、未被使用的对象*/
public GameObject GetPipe()
{
for (int i = 0; i < PipeAmount; i )
{
int item = (SuoYin i) % PipeAmount;
if (!Pipes[item].activeInHierarchy)
{
SuoYin = (item 1) % PipeAmount;
return Pipes[item];
}
}
return null;
}
}
大家还有什么问题,欢迎在下方留言!