在类似小行星的游戏中工作,当我的船被击中时,它会爆炸,我实例化了一艘新船,并用盾牌包围了它几秒钟。当飞船被护盾包围时,我会在几秒钟内停止碰撞。这一切都行得通。几秒钟后,我隐藏了屏蔽(SetActive(false)),然后设置playerCollider.enabled = true。护盾隐藏了,但对撞机不会重新启动。
当被杀死时的代码
public void KilledWaitTime()
{
SetLivesText();
Instantiate(player); //respawns player after killed
shield.SetActive(true);
playerCollider.enabled = false; //disables collider while shield up.
Debug.Log("collider = " + playerCollider.name);
Debug.Log("player = " + player.name);
Invoke("RemoveShields", 3);
}移除屏蔽并重新启用对撞机的代码
public void RemoveShields()
{
shield.SetActive(false);
// Collider pc = player.GetComponent<Collider>();
Debug.Log("collider pc = " + playerCollider.name);
Debug.Log("player pc = " + player.name);
playerCollider.enabled = true;
}发布于 2019-06-07 03:20:21
当您调用Instantiate(player);时,您正在创建一个与前一个播放器对象完全不同的对象。实例化播放器对象时,需要重新分配playerCollider以引用新创建的对象上的碰撞器。
您可能还希望将您的播放器预置和当前播放器对象分开:
private GameObject playerPrefab;
private GameObject player;
public void KilledWaitTime()
{
SetLivesText();
player = Instantiate(playerPrefab); //respawns player after killed
playerCollider = player.GetComponent<Collider>();
shield.SetActive(true);
playerCollider.enabled = false; //disables collider while shield up.
Debug.Log("collider = " + playerCollider.name);
Debug.Log("player = " + player.name);
Invoke("RemoveShields", 3);
}https://stackoverflow.com/questions/56483717
复制相似问题