1
resposta

[Bug] Script error: OnTriggerEnter2D This message parameter has to be of type: Collider2D The message will be ignored.

eu resolvi práticamente todos os erros mais este eu não consegui alguém poderia me ajudar aqui está o código:

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

public class Aviao : MonoBehaviour { private Rigidbody2D fisica; [SerializeField] private float forca; [SerializeField] private UnityEvent aoBater; [SerializeField] private UnityEvent aoPassarPeloObstaculo; private Vector3 posicaoInicial; private bool deveImpulsionar; private Animator animacao;

private void Awake()
{
    this.posicaoInicial = this.transform.position;
    this.fisica = this.GetComponent<Rigidbody2D>();
    this.animacao = this.GetComponent<Animator>();
}

private void Update () 
{

    this.animacao.SetFloat("VelocidadeY", this.fisica.velocity.y);
}


private void FixedUpdate()
{
    if(this.deveImpulsionar)
    {
        this.Impulsionar();
    }

}

public void DarImpulso()
{
    this.deveImpulsionar = true;
}
    

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 * this.forca, ForceMode2D.Impulse);
    this.deveImpulsionar = false;
}

private void OnCollisionEnter2D(Collision2D colisao)
{
    this.fisica.simulated = false;
    this.aoBater.Invoke();
}
private void OnTriggerEnter2D(Collision2D colisao)
{
    this.aoPassarPeloObstaculo.Invoke();
}

}

1 resposta

Olá, Yohana. Tudo bem?

Parece que você está enfrentando um problema com o Unity e o método OnTriggerEnter2D. O erro que você está vendo é porque o Unity espera que o parâmetro para o método OnTriggerEnter2D seja do tipo Collider2D, e não Collision2D.

No seu código, você tem:

private void OnTriggerEnter2D(Collision2D colisao)
{
    this.aoPassarPeloObstaculo.Invoke();
}

Mas deveria ser:

private void OnTriggerEnter2D(Collider2D colisao)
{
    this.aoPassarPeloObstaculo.Invoke();
}

A diferença entre os dois é que o Collision2D é usado com o método OnCollisionEnter2D, que é chamado quando dois objetos com colisores (e pelo menos um deles com um Rigidbody) colidem. Já o Collider2D é usado com o método OnTriggerEnter2D, que é chamado quando um objeto com um colisor entra em um Trigger. Veja se é isso mesmo por favor. Faça o teste, e qualquer coisa manda aqui de novo.

Espero ter ajudado e bons estudos!