unity对象池索引多个角色的脚本
时间: 2023-09-04 21:15:10 浏览: 115
下面是一个示例脚本,用于在Unity对象池中索引多个角色:
```csharp
using UnityEngine;
using System.Collections.Generic;
public class ObjectPool : MonoBehaviour
{
[System.Serializable]
public class Pool
{
public string tag;
public GameObject prefab;
public int size;
}
public List<Pool> pools;
public Dictionary<string, Queue<GameObject>> poolDictionary;
void Start()
{
poolDictionary = new Dictionary<string, Queue<GameObject>>();
foreach (Pool pool in pools)
{
Queue<GameObject> objectPool = new Queue<GameObject>();
for (int i = 0; i < pool.size; i++)
{
GameObject obj = Instantiate(pool.prefab);
obj.SetActive(false);
objectPool.Enqueue(obj);
}
poolDictionary.Add(pool.tag, objectPool);
}
}
public GameObject SpawnFromPool(string tag, Vector3 position, Quaternion rotation)
{
if (!poolDictionary.ContainsKey(tag))
{
Debug.LogWarning("Pool with tag " + tag + " doesn't exist.");
return null;
}
GameObject objectToSpawn = poolDictionary[tag].Dequeue();
objectToSpawn.SetActive(true);
objectToSpawn.transform.position = position;
objectToSpawn.transform.rotation = rotation;
poolDictionary[tag].Enqueue(objectToSpawn);
return objectToSpawn;
}
}
```
在这个示例脚本中,我们使用了一个List来存储所有的对象池,并使用一个Dictionary来存储每个对象池中的所有对象。在Start()函数中,我们遍历所有的对象池,创建一定数量的对象,并将它们添加到对象池中。在SpawnFromPool()函数中,我们使用传入的标签参数来获取对象池中的对象,并将其设置为激活状态,并设置其位置和旋转。注意,我们使用了一个Queue来实现对象池的FIFO(先进先出)逻辑。
您可以根据自己的需求修改和扩展这个示例脚本。例如,您可以添加一个索引标识符参数来标识不同的角色。
阅读全文