1
resposta

não esta gerando novos obstaculos

meus obstáculos estão sendo destruídos e não está gerando novos.

`` using System.Collections; using System.Collections.Generic; using UnityEngine;

public class Obstaculo : MonoBehaviour { [SerializeField] private float velocidade = 0.5f; [SerializeField] private float variacaoDaPosicaoY;

private void Awake()
{
    this.transform.Translate(Vector3.up* Random.Range(-variacaoDaPosicaoY, variacaoDaPosicaoY ));
}

private void Update()
{
    this.transform.Translate(Vector3.left* this.velocidade * Time.deltaTime);
}

private void OnTriggerEnter2D(Collider2D outro)
{
   this.Destruir();
} 

private void Destruir()
{
    GameObject.Destroy(this.gameObject);
}

}

``

está dando esse erro:

MissingReferenceException: The object of type 'GameObject' 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.Object.Internal_InstantiateSingle (UnityEngine.Object data, UnityEngine.Vector3 pos, UnityEngine.Quaternion rot) (at :0) UnityEngine.Object.Instantiate (UnityEngine.Object original, UnityEngine.Vector3 position, UnityEngine.Quaternion rotation) (at :0) UnityEngine.Object.Instantiate[T] (T original, UnityEngine.Vector3 position, UnityEngine.Quaternion rotation) (at :0) GeradorDeObstaculos.Update () (at Assets/Scripts/GeradorDeObstaculos.cs:23)

1 resposta

Olá Matheus!

A mensagem de erro ocorre porque o método Destruir() está tentando destruir o objeto this.gameObject, mas esse objeto já foi destruído anteriormente. Para corrigir isso, basta utilizar Destroy(gameObject) ao invés de GameObject.Destroy(this.gameObject), já que gameObject é uma propriedade que referencia o próprio objeto do script.

Além disso, removi o uso de this nas chamadas de método, pois não é necessário nesse contexto.

Certifique-se de que outras partes do código relacionadas à criação e destruição de objetos estejam consistentes para evitar esse tipo de erro.

Espero que isso ajude a resolver o problema!

Segue o codigo reescrito:

private void Awake()
{
    transform.Translate(Vector3.up * Random.Range(-variacaoDaPosicaoY, variacaoDaPosicaoY));
}

private void Update()
{
    transform.Translate(Vector3.left * velocidade * Time.deltaTime);
}

private void OnTriggerEnter2D(Collider2D outro)
{
    Destruir();
}

private void Destruir()
{
    Destroy(gameObject);
}

Espero ter ajudado! Grande Abraço e bons estudos!