Почему OnCollisonEnter2D не вызывается в Unity? - PullRequest
1 голос
/ 18 июня 2020

У меня есть 2 объекта, один, который движется вниз с постоянной скоростью, и объект, управляемый игроком. Оба объекта имеют BoxCollider2D и Rigidbody2D, но метод OnCollisonEnter2D, прикрепленный к управляемому объекту, не вызывается. Оба объекта сталкиваются, визуально сталкиваясь друг с другом, и будут вращаться, пока не будет остановлено вращение. Ниже приведен код метода OnCollisonEnter2D. Что я делаю не так?

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

publi c class Collisons: MonoBehaviour {publi c int Score;

public void OnCollisonEnter2D(Collider2D collision)
{
    GameObject collider = collision.gameObject;
    Debug.Log("Collided");
    //checks to see if the block is correct;
    if (collider.GetComponent<BlockBehavior>().correct)
    {
        Destroy(collision.gameObject);
        Score++;
    }
    else
    {
        this.gameObject.GetComponent<Movement>().gameOver = true;
    }
}

}

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Я вижу, что вы отключили название мероприятия. Это должно быть OnCollisionEnter2D . Кроме того, параметры не совпадают.

это должно быть:

private void OnCollisionEnter2D(Collision2D collision)
{
    GameObject collider = collision.gameObject;
    Debug.Log("Collided");
    //checks to see if the block is correct;
    if (collider.GetComponent<BlockBehavior>().correct)
    {
        Destroy(collision.gameObject);
        Score++;
    }
    else
    {
        this.gameObject.GetComponent<Movement>().gameOver = true;
    }
}

Я помечаю все эти виды событий как частные как ну (соглашение), так как это это не logi c, который вы хотели бы открыть другому скрипту.

0 голосов
/ 18 июня 2020

Проверьте положение Z, чтобы оба GameObject находились на одной оси Z.

...