Upon loading a new Scene I got The object of type has been destroyed but you are still trying to access it.
Hello All ! I´m doing a simple puzzle level where I have to collide with a GameObject in order to another GameObjects appear so I can cross safely to the End Line. I have just duplicated the scene and then trying to re-arrange the items I have already and when I collide with the GameObject, the following error appears.
I know the objects are destroyed when I load the new scene, however why is keep calling the previous objects when I collide and how can reference the new object to the new scene ?
MissingReferenceException: The object of type 'RedSuperBlock' 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. UnityEngine.Component.GetComponent[T] () (at :0) RedSuperBlock.ChangeColorOfBlock (System.Int32 id) (at Assets/Scripts/Blocks/RedSuperBlock.cs:47) RedSuperBlock.OnCollisionEnter2D (UnityEngine.Collision2D block) (at Assets/Scripts/Blocks/RedSuperBlock.cs:29)
Line 29 is this: BlockChanger.ChangeColor(redID); Line 47 is this: GetComponent().sprite = purpleBlockSprite;
using UnityEngine;
using EZCameraShake;
public class RedSuperBlock : MonoBehaviour
{
[SerializeField] private Animator redBlock;
[SerializeField] private Sprite redBlockSprite;
[SerializeField] private Sprite purpleBlockSprite;
public bool blockerColor; // Controller of Red & Purple Master Block, False = Red, True = Purple
public int redID = 1;
public int purpleID = 2;
public int redOn = 1;
public int redOff = 2;
public int purpleOn = 1;
public int purpleOff = 2;
private void Start()
{
BlockChanger.ChangeColor += ChangeColorOfBlock;
}
private void OnCollisionEnter2D(Collision2D block)
{
if (!blockerColor && block.gameObject.CompareTag("Player") && block.contacts[0].normal.y > 0.5f)
{
SoundManager.soundManager.Play("Pow");
BlockChanger.ChangeColor(redID); // Turns Purple Master Block
BlockChanger.DoRed(redOn);
BlockChanger.DoPurple(purpleOff);
}
else if (blockerColor && block.gameObject.CompareTag("Player 2") && block.contacts[0].normal.y > 0.5f)
{
SoundManager.soundManager.Play("Pow");
BlockChanger.ChangeColor(purpleID); // Turns Red Master Block
BlockChanger.DoPurple(purpleOn);
BlockChanger.DoRed(redOff);
}
}
public void ChangeColorOfBlock(int id) // Reset all Red Blocks
{
if (id == 1)
{
blockerColor = true; // Turns Purple
GetComponent<SpriteRenderer>().sprite = purpleBlockSprite; // Enable Purple Sprite
redBlock.SetTrigger("Purple");
gameObject.transform.GetChild(0).gameObject.SetActive(false);
gameObject.transform.GetChild(1).gameObject.SetActive(true);
CameraShaker.Instance.ShakeOnce(1f, 1f, .1f, 1f);
}
else if (id == 2)
{
blockerColor = false; // Turns Red
GetComponent<SpriteRenderer>().sprite = redBlockSprite; // Enable Red Sprite
redBlock.SetTrigger("Red");
gameObject.transform.GetChild(0).gameObject.SetActive(true);
gameObject.transform.GetChild(1).gameObject.SetActive(false);
CameraShaker.Instance.ShakeOnce(1f, 1f, .1f, 1f);
}
}
}