Столкновение в перетаскиваемых объектах не работает - PullRequest
0 голосов
/ 21 мая 2019

Моя игра имеет возможность щелкать и создавать объекты и перемещать их с помощью мыши.Когда блоки сталкиваются со стенами, я хочу, чтобы они были разрушены.Я настроил столкновение таким же образом, как и на другие объекты, но оно не регистрируется.Ниже приведен код перемещения и столкновения.

  void OnMouseDrag()
{
    if (prepPhase == true)
    {
        Vector2 mousePosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        Vector2 objectPosition = Camera.main.ScreenToWorldPoint(mousePosition);

        transform.position = objectPosition;
    }
}


void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.CompareTag("Wall"))
    {
        Destroy(col.gameObject);
        Debug.Log("Collision");
    }
}

Каждый раз, когда создается новый блок, он создает клон предыдущего объекта.К каждому клону прилагается этот скрипт.Я также протестировал прикрепление sctipt столкновения к стене, а не к блоку, при этом столкновение обнаруживало тег «Block».Но все же это не разрушает объект.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Проблема в том, что вы по существу телепортируете свой объект, устанавливая положение.Это предотвращает запуск события onCollisionEnter2D.

Вы можете подтвердить это, поместив запись в журнал до того, как if

void OnCollisionEnter2D(Collision2D col)
{
    Debug.Log("OnCollisionEnter2d Fired");
    if (col.gameObject.CompareTag("Wall"))
    {
        Destroy(col.gameObject);
        Debug.Log("Collision");
    }
}

Изменение на OnCollisionStay2D должно сработать.

void OnCollisionStay2D(Collision2D col)
{
    if (col.gameObject.CompareTag("Wall"))
    {
        Destroy(col.gameObject);
        Debug.Log("Collision");
    }
}
0 голосов
/ 21 мая 2019

Ваш Destroy не относится к точному игровому объекту в столкновении.Вместо этого попробуйте:

Destroy(col.gameObject)

Читать документ: https://docs.unity3d.com/ScriptReference/Collision2D.html

...