请帮我玩游戏我的游戏有问题



我正在制作一个objectpoolingManager,它应该将项目符号放在一个名为objectpoolingManager的空对象下。在我的代码中,我写道,当我单击鼠标按钮时,它必须启用项目符号,然后在2秒钟后,它将禁用项目符号。现在我的问题是,它总是被禁用。

public GameObject bulletPrefab;
public int bulletAmount = 20;
private List<GameObject> bullets;
// Start is called before the first frame update
void Awake()
{
instance = this;
bullets = new List<GameObject>(bulletAmount);
for (int i = 0; i < bulletAmount;i++)
{
GameObject prefabInstance = Instantiate (bulletPrefab);
prefabInstance.transform.SetParent (transform);
prefabInstance.SetActive(false);
}
bullets.Add(bulletPrefab);
}
public GameObject GetBullet ()
{
foreach (GameObject bullet in bullets)
{
if(!bullet.activeInHierarchy)
{
bullet.SetActive (true);
return bullet;
}
}
GameObject prefabInstance = Instantiate (bulletPrefab);
prefabInstance.transform.SetParent (transform);
bullets.Add(bulletPrefab);
return prefabInstance;
}
}

池管理器中对象的getter/setter不应该实例化或销毁gamobject,而应该启用和禁用它们。这就是汇集的目的。对它们进行排队/取消排队并像这样激活/停用更有意义。

private Queue<GameObject> objPool;
private Queue<GameObject> activeObj;
//get from pool
public GameObject GetObjFromPool(Vector3 newPosition, Quaternion newRotation)
{
GameObject newObject = objPool.Dequeue();
newObject.SetActive(true);
newObject.transform.SetPositionAndRotation(newPosition, newRotation);
//keep actives to be retrieved
activeObj.Enqueue(newObject);
return newObject;
}
//return to pool
public void ReturnObjToPool(GameObject go)
{
go.SetActive(false);
objPool.Enqueue(go);
}

找到这个问题,以备不时之需。

如果你搜索一下,你可以找到很多池化的例子。这是一个。

最新更新