Question by
jok3riswild · Oct 18, 2018 at 06:32 PM ·
coroutinerigidbody2dnoobnull
How to kill player when colliding with enemy?
I'm fairly new to c-sharp and unity, and I have a script where if an enemy hits the player, it will activate a coroutine that kills and then respawns the player. Problem is, whenever I run the program and the player hits the enemy, nothing happens. I then get the error message: The object of type 'Rigidbody2D' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. I messed around with the script a little and deduced that the problem begins with the "Hide Player Script" line of code. I'm not quite sure what to do. Help?
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class LevelManager : MonoBehaviour {
public GameObject CurrentCheckPoint;
private Rigidbody2D Player;
// Particles
public GameObject DeathParticle;
public GameObject RespawnParticle;
//Respawn Delay
public float RespawnDelay;
//Point Penalty on Death
public int PointPenaltyOnDeath;
//Store Gravity Value
private float GravityStore;
//Use this for initialization
void Start () {
Player = FindObjectOfType<Rigidbody2D> ();
}
public void RespawnPlayer(){
StartCoroutine ("RespawnPlayerCo");
}
public IEnumerator RespawnPlayerCo(){
//Hide Player
Player.GetComponent<Renderer> ().enabled = false;
//Generate Death Particle
Instantiate (DeathParticle, Player.transform.position, Player.transform.rotation);
//Point Penalty
ScoreManager.AddPoints(-PointPenaltyOnDeath);
//Match Players transform position
Player.transform.position = CurrentCheckPoint.transform.position;
//Show player
Player.GetComponent<Renderer> ().enabled = true;
//Gravity Reset
GravityStore = Player.GetComponent<Rigidbody2D>().gravityScale;
Player.GetComponent<Rigidbody2D>().gravityScale = 0f;
Player.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
//Gravity restore
Player.GetComponent<Rigidbody2D>().gravityScale = GravityStore;
//Debug Message
Debug.Log ("Player Respawn");
//Respawn Delay
yield return new WaitForSeconds (RespawnDelay);
//Spawn Particle
Instantiate (RespawnParticle, CurrentCheckPoint.transform.position, CurrentCheckPoint.transform.rotation);
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612180539im_/https://answers.unity.com/themes/thub/images/avi.jpg)