Как выровнять «дорожки» или модульные объекты в Unity? - PullRequest
0 голосов
/ 01 мая 2018

Я разрабатываю простую игру, в которой пользователь может размещать разные, но модульные объекты (например, дорожки, дороги и т. Д.).

Мой вопрос: как совмещать и размещать разные объекты, когда размещены один рядом с другим?

Мой первый подход - создать скрытый дочерний объект (блок) для каждого объекта модуля и поместить его в границу, где можно разместить другой объект (см. Пример моего изображения), чтобы я мог использовать эти координаты (x , y, z) для выравнивания другого объекта.

Но я не знаю, лучший ли это подход.

enter image description here

enter image description here

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Подход для произвольных объектов / моделей и деформируемых моделей.

[A] Физический подход будет учитывать все поверхности двух объектов, и вам может потребоваться проверить, не перекрываются ли объекты, используя точечные произведения между поверхностями. Это немного дороже, но ничего противного. Если здесь не задействовано match , вы сможете добавить соответствующие функции (см. [B]). Однако это единственный способ работать с не предопределенными моделями или деформируемыми моделями .

Подходы для сопоставления простых и сложных моделей

[B] Точки привязки - это хорошо, но одного этого недостаточно. Я думаю, вам нужно, чтобы объект имел:

  • a разреженное представление (например, комплексно ориентированная сфера для куба),
  • и поместите ключевые точки привязки ,
  • помечено полярностью или цветом , и в конечном итоге ориентацией (это ориентированных точек привязки ); например, в случае рельсов вы хотите, чтобы рельсы привязывались {+} с помощью {+} и запрещали {+} с помощью {-}. В случае более сложного объекта или когда у вас есть несколько ориентаций (например, 2 грани поверхности, но только одна является кандидатом на пару объектов, соответствующих ), вам потребуется более 2 полярности, но 3 различных на соответствие поверхности кандидата или функция , следовательно, цвета (или любое перечисление). Вам нужно 3 разных цвета, чтобы убедиться, что есть уникальная конфигурация трехмерного пространства. Вы создаете что-то, что в химии называется энантиомер 1047 *.
  • Вы также можете использовать функции пары точек , которые описывают относительную положение и ориентация двух ориентированных точек , когда ориентированная поверхность не подходит.

Ссылки

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

  1. Модель на глобальном уровне, соответствие локально: эффективное и надежное распознавание 3D-объектов, Дрост и др.

  2. 3D-модели и сопоставления

0 голосов
/ 07 мая 2018

Резюме:

1. Определите, что такое «точка привязки»

2. Определите, какой у вас порог

3. Обновление положения нового игрового объекта

Маленькое объяснение

1. Поэтому я предполагаю, что вам нужен способ определить, какие части объекта являются «точками привязки». Потому что они могут быть понятны в некоторых примерах, например, в Кубе, где целая вершина могла быть точками привязки, но трудно определить, что каждая вершина в аморфных объектах.

Простое решение может быть предложено @PierreBaret, которое заключается в определении вашего компонента преобразования, который является «точками привязки». Другой - тот, который вы поддерживаете, создавая пустые игровые объекты, которые будут действовать как точки привязки точек на игровом объекте.

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

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

Визуальное представление:

enter image description here

Примечание: Порог расстояния показывает только ОДНУ из 4 текущих проверок пороговых значений для 4 вершин в квадрате, но этот синий круг следует повторить еще 3 раза, по одному для каждого зеленая точка привязки красного квадрата

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

Надеюсь, это поможет!

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