#c# #unity3d
#c# #unity3d
Вопрос:
Я пытаюсь запрограммировать сценарий размещения изометрического здания. В каждом здании есть компонент PolygonCollider2D с триггером. При размещении нового здания я пытаюсь проверить, перекрывается ли PolygonCollider2D размещенного здания с чем-либо еще (чтобы проверить, допустимо ли размещение). Мой код выглядит следующим образом:
Отрегулируйте точки нового размещенного строительного коллайдера в зависимости от положения мыши
Vector2[] points = polygonCollider2D.points;
points.SetValue(polygonCollider2D.points[0] (Vector2)mousePosition, 0);
points.SetValue(polygonCollider2D.points[1] (Vector2)mousePosition, 1);
points.SetValue(polygonCollider2D.points[2] (Vector2)mousePosition, 2);
points.SetValue(polygonCollider2D.points[3] (Vector2)mousePosition, 3);
polygonCollider2D.points = points;
Настройка фильтра контактов:
ContactFilter2D contactFilter2D = new ContactFilter2D();
contactFilter2D.useTriggers = true;
contactFilter2D.SetLayerMask(polygonCollider2D.gameObject.layer);
Проверка на наличие коллизий
List<Collider2D> list = new List<Collider2D>();
Debug.Log(polygonCollider2D.OverlapCollider(contactFilter2D, list));
Однако, если там уже есть здание, оно все равно не регистрирует перекрытие.
Чего я не понимаю / делаю неправильно?
Большое спасибо за помощь!
Ответ №1:
Похоже, что проблема заключается в вашем коде, который устанавливает точки полигонального коллайдера. Если этот код выполняется несколько раз, он будет многократно смещать коллайдер все дальше и дальше от его исходного положения. Вероятно, вы не хотите менять фактический коллайдер; обычно вам следует переместить объект, у которого есть коллайдер. Итак, вы бы заменили эти строки чем-то вроде этого:
gameObject.transform.position = mousePosition;
Комментарии:
1. Способ, которым я это установил, заключается в том, что фактический объект не создается во время проверки. Я беру коллайдер объекта из сборного и пытаюсь проверить размещение. Только если размещение допустимо, объект будет размещен. Я должен упомянуть, что код для установки точек полигонального коллайдера запускается только при нажатии кнопки мыши, а не несколько раз.
2. Если он запускается всякий раз, когда происходит щелчок мыши, это означает, что он запускается несколько раз в течение срока службы сборного элемента. Если вы не создаете копию компонента PolygonCollider2D, это приведет к повторному перемещению коллайдера в сборке, поскольку изменения в сборке будут постоянными, даже если они будут применены в режиме запуска.