- Home /
Respawn problem
I have just made a mistake but I can't figure out what I have done wrong. I have tried rewriting it a few times but still it does not work. The first part works as I get the reading "Dead" and the player dies. But then I don't get the next reading or the respawn. Please can you help me.
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class KillPlayer : MonoBehaviour {
public GameObject player;
public GameObject playerPrefab;
public GameObject respawn;
void OnTriggerEnter (Collider other) {
Destroy (player);
Debug.Log ("Dead");
}
void Respawn() {
if (GameObject.FindGameObjectWithTag("Player") == null) {
Instantiate (playerPrefab, GameObject.Find("Respawn").transform.position, Quaternion.identity);
Debug.Log("Respawn");
}
}
}
Answer by SnStarr · Mar 13, 2017 at 07:18 AM
I would rewrite it in such a way as to check for something...So something like this..
public GameObject player;
public GameObject playerPrefab;
public GameObject respawn;
private bool isDead = false;
void OnTriggerEnter (Collider other)
{
if( !isDead)
Destroy (player);
Debug.Log ("Dead");
}
void Update()
{
if( isDead )
Respawn();
}
void Respawn()
{
if (GameObject.FindGameObjectWithTag("Player") == null) {
Instantiate (playerPrefab, GameObject.Find("Respawn").transform.position, Quaternion.identity);
Debug.Log("Respawn");
}
}
this way you can check every frame....IF at ANY TIME the player becomes dead...it will call the respawn method...Thats something your not doing is CALLING the respawn method...
Answer by Hanoble · Mar 13, 2017 at 07:23 AM
I do not see anywhere in your code where you are actually calling your Respawn() method. I assuming you are hoping that by destroying the player that the GameObject.FindGameObjectWithTag of the player would be null and instantiate your player again, but in order for that to work you would need to call Respawn() in the Update() method of that script. You essentially need this;
void Update()
{
Respawn();
}
As far as being efficient, that is certainly not it. You could look into calling Respawn() after the Dead debug, or if you want a timer look into a coroutine to handle this. GameObject.FindGameObjectWithTag is not the type of code you want in an update method for performance reasons, but for learning it can get you going in the right direction.
Thank you for your reply I new it was going to be a simple mistake.
Your answer
Follow this Question
Related Questions
Respawn Player after Health 0 1 Answer
Respawn Player / enable new camera 0 Answers
What to do with Player game object while he is waiting to respawn. 1 Answer
Falling off respawn script 1 Answer
Player lives script 1 Answer