Два Gameobjects сталкиваются, хотя они не находятся на одном месте - PullRequest
0 голосов
/ 06 октября 2019

У меня есть Gameobject, называемый ball, и еще один, называемый floor. Как видно из кода, когда мяч падает на пол, должна быть сделана распечатка.

void OnCollisionEnter2D(Collision2D collision)
{
    bg = GameObject.Find(bg_name);

    if (collision.gameObject.tag == "floor")
    {
        //bg.GetComponent<ControlGame>().deleteBall();
        //bg.GetComponent<ControlGame>().recreateBall();
        print("Ball hit floor");
    }

    if (collision.gameObject.tag == "rope")
    {
        bg.GetComponent<ControlGame>().ToggleIsShot(false);
    }
}

Проблема в том, что я переместил пол сейчас так, что мяч и пол имеют разныеглубина. Тем не менее, распечатка сделана, хотя два Gameobjects не касаются. Смотрите скриншоты ниже: enter image description here Printout is made as if a collision has occurred.

Печать находится в левом нижнем углу. Почему это так?

Согласно приведенному ниже комментарию, значение z не оказывает влияния. Но у меня есть также детектор столкновений для веревки, которая представляет собой кривую Безье с прикрепленным к ней EdgeCollider2D. Когда веревка проходит через пол, ничего не срабатывает в onCollisionEnter2D.

void OnCollisionEnter2D(Collision2D collision)
{
    bg = GameObject.Find(bg_name);
    if (collision.gameObject.tag == "floor")
    {
        print("floor collision");
        bg.GetComponent<ControlGame>().ShootBall();
    }
} 

1 Ответ

1 голос
/ 07 октября 2019

Ну, это Collider2D.

Вы только изменили позицию пола Z (глубина), которая в принципе полностью игнорируется в 2D-игре / 2D-физикой.

Как вы также можете видеть в GameView for Physics 2D, объекты все еще выровнены и сталкиваются.


Почему это также не работает для столкновения между веревкой и полом?

Пожалуйста, ознакомьтесь с Матрицей действий при столкновении , для которой могут быть обнаружены столкновения / триггеры.

→ По крайней мере, один из объектов должен быть Rigidbody2D.

Если, например, веревка перемещается по сценарию, то это должен быть Kinematic → в этом случае также пол должен быть Rigidbody2D, а не Kinematic.

Причина, по которой я думаю, что он отлично сработал для мяча, состоит в том, что он уже не кинематический Rigidbody2D, поэтому способен обнаруживать столкновения со статическими коллайдерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...