private void DoRespawn() { SetState(PlayerState.Idle); if (gameHUD) { gameHUD.DoRespawn(); } gravityAlterations.Clear(); gravityContacts.Clear(); gravity = Physics.gravity; gravityLerp = gravityDir; Time.timeScale = 1.0f; GetComponent <Rigidbody>().velocity = Vector3.zero; // We have a checkpoint? foreach (GameObject obj in GameObject.FindGameObjectsWithTag("Checkpoint")) { CheckpointTrigger checkpoint = obj.GetComponent <CheckpointTrigger>(); if (checkpoint && checkpoint.activated) { // Restore every collectable active state to the states stored in the checkpoint. foreach (GameObject collectable in Collectable.AllCollectables) { if (collectable) { collectable.SetActive(true); } } foreach (GameObject collectable in checkpoint.collectables) { if (collectable) { collectable.SetActive(false); } } // Go to the checkpoint position and rotation. transform.position = obj.transform.position; transform.rotation = obj.transform.rotation; if (playerCamera) { playerCamera.Reset(); } if (respawnSound) { GetComponent <AudioSource>().PlayOneShot(respawnSound); } return; } } // Otherwise just start the entire level over again, including the timer. GameObject respawnobj = GameObject.FindGameObjectWithTag("Respawn"); if (respawnobj) { transform.position = respawnobj.transform.position; transform.rotation = respawnobj.transform.rotation; } else { transform.position = Vector3.zero; transform.rotation = Quaternion.identity; } levelStartTime = 0.0f; // Restore all the collectables. if (Collectable.AllCollectables != null) { foreach (GameObject collectable in Collectable.AllCollectables) { if (collectable) { collectable.SetActive(true); } } } }