Обнуление скорости твердого тела при появлении респауна:
IEnumerator Respawn()
{
PlayerRB.velocity = Vector3.zero;
// ... rest of method
}
В качестве идентификатора вам, вероятно, не нужно запускать GetComponent
на каждом кадре. Это дорогостоящая операция, поэтому лучше делать это не так часто, как вы можете:
void Start()
{
PlayerRB = GetComponent<Rigidbody>();
}
void Update()
{
if (Dead)
{
StartCoroutine("Respawn");
}
}
Если вместо этого вы хотите отключить все физические взаимодействия с игроком, пока он мертв, выможет установить его кинематическим в течение этого времени. Просто обязательно сбросьте isKinematic
перед добавлением к нему силы.
IEnumerator Respawn()
{
PlayerRB.isKinematic = true;
// ... rest of method
PlayerRB.isKinematic = false;
PlayerRB.useGravity = true;
PlayerRB.AddForce(0, 400, 0); // Does a little hop.
InRespawn = false; // Tells the game that respawn is finished.
}