MissingReferenceException even after checking if object is null
I have been learning Unity for a couple of weeks, and I am working on a prototype for a game. I am trying to add death effects for the traps in the game (sounds and particles), but also have them rotate towards the Player. Since adding the particle effects, I get the MissingReferenceException error for all the traps in my scene. It sends me to Vector3 directionToTarget = target.transform.position - this.transform.position;
I tried to verify if the object is not null, but I get the same result. The last two added voids are a desperate attempt to figure it out on my own. Can anyone help me figure out what I am doing wrong? Thank you in advance! This is my messy code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Trap : MonoBehaviour
{
public ParticleSystem deathSpark;
//public GameObject deathSpark;
[SerializeField] private Transform target;
private enum FollowType { Forward, Up, Right }
// This is seperate for each cube in the inspector, so I can configure them accordingly
[SerializeField] private FollowType follow;
private void Update()
{
// Get the direction to the target by subtracting the target position by the current position.
if (gameObject != null)
{
Vector3 directionToTarget = target.transform.position - this.transform.position;
switch (follow)
{
case FollowType.Forward:
transform.forward = directionToTarget;
break;
case FollowType.Up:
transform.up = directionToTarget;
break;
case FollowType.Right:
transform.right = directionToTarget;
break;
default:
break;
}
}
}
private void OnTriggerEnter(Collider other)
{
if ((gameObject != null) && gameObject.CompareTag("BoHead"))
{
SoundManagerScript.PlaySound("Heavy Object Impact 4");
Instantiate(deathSpark, transform.position, Quaternion.identity);
CreateExplosion();
//Instantiate(deathSpark, transform.position, transform.rotation);
//Destroy(gameObject);
}
}
void CreateExplosion()
{
if (gameObject != null)
{
Instantiate(deathSpark, transform.position, Quaternion.identity);
deathSpark.Play();
}
}
public void Destroy()
{
if (gameObject != null)
{
SoundManagerScript.PlaySound("Heavy Object Impact 4");
Instantiate(deathSpark, transform.position, Quaternion.identity);
}
}
}
Answer by razvaniorga · Oct 12, 2021 at 04:41 PM
Nevermind, I solved it. The problem was not the particles, but that the traps were following the player, so upon player death, I set it to destroy gameObject. I temporarily rewrote the player script to just restart the level, and it worked. I am leaving this here, along with where I found the solution. We really should get used to solving this error fast, because it is very easy to encounter it. Here is where I found the idea:
https://answers.unity.com/questions/1334963/how-to-stop-following-player-when-dead.html @NitroGain Thank you. I saw your answer in the post above and it helped me.