我创建了一个对象池函数,当我在播放器脚本中调用Get()函数时,我不想给它传递一个像Get(0)
这样的数字,而是像Get((int)ObjPrefabs.PlayerBullet)
这样调用它。
所以我尝试使用"enum",但是我不知道如何将预置对象赋值给enum。
public class ObjectManagerFirst : MonoBehaviour
{
public GameObject[] prefabs;
public enum ObjPrefabs {PlayerBullet};
List<GameObject>[] pools;
void Awake()
{
pools = new List<GameObject>[prefabs.Length];
for (int index = 0; index < pools.Length; index++)
{
pools[index] = new List<GameObject>();
}
}
public GameObject Get(int index)
{
GameObject select = null;
foreach(GameObject item in pools[index])
{
if(!item.activeSelf)
{
select = item;
select.SetActive(true);
break;
}
}
if(!select)
{
select = Instantiate(prefabs[index], transform);
pools[index].Add(select);
}
return select;
}
}
这是目前我在播放器脚本中调用它的方式:GameObject bullet = objectManager.Get(0);
但我想:GameObject bullet = objectManager.Get((int)ObjPrefabs.PlayerBullet);
我已经尝试了以下,但它没有工作:
List<int> ObjList = new List<int>();
int value = ObjList[(int)ObjPrefabs.PlayerBullet]
2条答案
按热度按时间aemubtdh1#
您可以将int值赋给enum,然后将其传递给function,下面是一个示例
然后像这样调用Get函数
一定会成功的。
k5ifujac2#
与其使用
int
作为索引,为什么不坚持使用enum
并使用而是使用
有关
XXX
,请参见下文现在,对于池本身,阵列是可以的,但更好的是,例如,简单地使用
Queue
。我建议使用一种更复杂但更容易处理的池化方法:
最后你会用