Получить игровой объект единого коллайдера, когда он прикреплен к жесткому телу - PullRequest
0 голосов
/ 11 января 2019

У меня есть игровой объект с жестким телом, а затем группа вспомогательных игровых объектов со спрайтами и коллайдерами, где каждый коллайдер прикреплен к жесткому телу родителя. Это хорошо работает для физики и столкновений, поскольку вся группа объектов отскакивает и сталкивается с пейзажем. Однако, когда две группы сталкиваются, я хочу, чтобы они наносили урон одному из отдельных объектов вспомогательной игры. У меня есть OnCollisionEnter2D (Collision2D coll) на каждом из подчиненных объектов (на которых есть коллайдер), однако, когда они сталкиваются с другой группой, используя coll.gameObject, возвращаемый игровой объект всегда является родителем, а не отдельным субобъектом.

Long Story Short: Есть ли способ получить игровой объект коллайдера, когда он прикреплен к другому игровому объекту с твердым телом?

Примечание. Я видел несколько решений, в которых для нахождения объекта используется лучевое наложение, но это кажется ненужной работой.

Примечание 2: я также видел варианты, которые используют триггер, но я предпочитаю столкновение, поскольку оно также обрабатывает физику.

private void OnCollisionEnter2D(Collision2D coll)
{
        Debug.Log(coll.gameObject.name); // Showing the parent
        ShipPiece sp = coll.gameObject.GetComponent<Piece>(); // Looking for the individual piece
        if (sp != null)
        {
            // Apply the damage to the other piece based off the weight of this piece
            coll.gameObject.SendMessage("ApplyDamage", weight*10);
        }
}

Очевидно, что я могу сделать первую фигуру в столкновении, так как это класс, в котором существует OnCollisionEnter2D, но я не могу найти способ получить вторую фигуру, с которой она сталкивается.

1 Ответ

0 голосов
/ 11 января 2019

Вы пытаетесь получить свойство gameObject объекта Collision2D, когда вам действительно нужны свойства gameObject самого Collider2D. Collision2D имеет свойства collider и otherCollider, которые вы можете использовать:

private void OnCollisionEnter2D(Collision2D coll)
{
    Debug.Log(coll.collider.gameObject.name);
    Debug.Log(coll.otherCollider.gameObject.name);
    ...   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...