Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] A Unity da erro quando tento chamar uma função de outro arquivo.

Estou fazendo o curso "Unity 2D parte 1: criando um jogo 2D" e estou com dificuldades na aula "04.Game Over" na segunda atividade "Congelando o tempo". A Unity da erro quando tento chamar a função "FinalizarJogo()" do script "diretor.cs" dentro do script "aviao.cs".

NullReferemceException: Object reference not set to an object Avião.OnCollisionEnter2D (UnityEngine.Collision2D colisao) (at Assets/Scripts/Avião.cs:43) Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Avião

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

public class Avião : MonoBehaviour {
    private Rigidbody2D fisica;
    [SerializeField]
    private float forca;
    [SerializeField]
    private GameObject GameOver;
    private Diretor diretor;
    //private Vector3 posicaoInicial;

    private void Awake() {
        this.fisica = this.GetComponent<Rigidbody2D>();
        this.diretor = GameObject.FindObjectOfType<Diretor>();
        //this.posicaoInicial = this.transform.position
    }

    // Executado a cada frame
    private void Update() {
        if(Input.GetButtonDown("Fire1")) 
        {
            this.Subir();
        }

        if(Input.GetButtonDown("Fire2")) 
        {
            this.Descer();
        }
    }


    private void Subir() {
        this.fisica.AddForce(Vector2.up * forca, ForceMode2D.Impulse);
    }

    private void Descer() {
        this.fisica.AddForce(Vector2.down * forca, ForceMode2D.Impulse);
    }

    private void OnCollisionEnter2D(Collision2D colisao) {
        this.diretor.FinalizarJogo();
        this.fisica.simulated = false;
    }
}

Diretor

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

public class Diretor : MonoBehaviour {
    [SerializeField]
    private GameObject GameOver;

    public void FinalizarJogo() {
        Time.timeScale = 0;
        this.GameOver.SetActive(true);
    }
}
1 resposta
solução!

Descobri dava erro por causa do Awake. Quando Este é executado o diretor ainda não havia sido criado, assim basta substituir o Awake pelo Start.