用list写一个unity子弹池的代码
时间: 2023-03-19 21:22:08 浏览: 129
以下是一个简单的Unity子弹池的示例代码,使用List实现:
```csharp
using System.Collections.Generic;
using UnityEngine;
public class BulletPool : MonoBehaviour
{
public GameObject bulletPrefab;
public int poolSize;
private List<GameObject> bullets;
private void Start()
{
bullets = new List<GameObject>(poolSize);
for (int i = 0; i < poolSize; i++)
{
GameObject bullet = Instantiate(bulletPrefab);
bullet.SetActive(false);
bullets.Add(bullet);
}
}
public GameObject GetBullet()
{
for (int i = 0; i < bullets.Count; i++)
{
if (!bullets[i].activeInHierarchy)
{
return bullets[i];
}
}
GameObject bullet = Instantiate(bulletPrefab);
bullet.SetActive(false);
bullets.Add(bullet);
return bullet;
}
}
```
在这个示例中,BulletPool是一个继承自MonoBehaviour的脚本,它有一个bulletPrefab变量,它是要生成的子弹的预制件。poolSize变量指定了要创建的子弹对象池的大小。bullets变量是用来存储子弹对象的List。
在Start函数中,我们创建了指定数量的子弹对象,并将它们添加到bullets List中。由于在开始时没有任何子弹被使用,因此我们将它们都设置为不活动状态。
GetBullet函数是用来获取子弹对象的。它首先遍历bullets List中的所有子弹对象,找到第一个不处于活动状态的子弹对象,并返回该对象。如果没有找到任何可用的子弹对象,则创建一个新的子弹对象,并将其添加到bullets List中,然后返回该对象。
在使用子弹时,可以调用BulletPool的GetBullet函数来获取可用的子弹对象,并将其设置为活动状态。当子弹不再需要时,应将其设置为不活动状态,并将其返回到子弹池中以供以后使用。
阅读全文