a Unity diz que Referência de objeto não definida para uma instância de um objeto impulso.OnCollisionEnter2D
codigo do "Avião":
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class impulso : MonoBehaviour { public float velociadade; private Rigidbody2D fisica; public float forca; private Vector3 posicaoInicial;
private Diretor diretor;
private void Awake()
{
this.posicaoInicial = this.transform.position;
this.fisica = this.GetComponent<Rigidbody2D>();
}
private void Star()
{
this.diretor = GameObject.FindObjectOfType<Diretor>();
}
private void Update() { if(Input.GetButtonDown("Fire1")) { this.Impulsionar(); }
Move();
}
public void Reiniciar()
{
this.transform.position = this.posicaoInicial;
this.fisica.simulated = true;
}
private void Impulsionar()
{
this.fisica.velocity = Vector2.zero;
this.fisica.AddForce(Vector2.up * forca, ForceMode2D.Impulse);
}
void Move ()
{
Vector3 movimento = new Vector3(Input.GetAxis("Horizontal"), 0f, 0f);
transform.position += movimento * Time.deltaTime * velociadade;
}
private void OnCollisionEnter2D (Collision2D colisao)
{
this.fisica.simulated = false;
this.diretor.FinalizarJogo();
}
}
codigo do Diretor:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Diretor : MonoBehaviour { private impulso Impulso; [SerializeField] private GameObject FundoGameOver;
private void Start()
{
this.Impulso = GameObject.FindObjectOfType<impulso>();
}
public void FinalizarJogo()
{ Time.timeScale = 0; this.FundoGameOver.SetActive(true); }
public void ReiniciarJogo()
{
this.FundoGameOver.SetActive(false);
Time.timeScale = 1;
this.Impulso.Reiniciar();
this.DestruirObstaculos();
}
private void DestruirObstaculos()
{
obstaculo [] obstaculos = GameObject.FindObjectsOfType<obstaculo>();
foreach(obstaculo Obstaculo in obstaculos)
{
Obstaculo.destruir();
}
}
}