Каков наиболее эффективный способ создания группы 2D-плиток с 2D-коллайдерами в Unity3D?

Прежде всего, я использую Unity3d.

Каков наиболее эффективный (с точки зрения памяти) способ создания группы 2D-листов с 2D-коллайдерами с использованием текстурного атласа (и данных тайлов)?

Справочная информация: я работаю над активом для создания 2D-ландшафта. Это очень похожий стиль генерации на случайную генерацию Terraria. В настоящее время каждая плитка создается как отдельный GameObject. Как я теперь знаю, это крайне неэффективно, и вместо этого я должен использовать атлас текстуры и данные тайлов. Вот ссылка на учебное пособие, которое я изучал, посвященное этому в 3D: http://studentgamedev.blogspot.co.uk/2013/08/unity-voxel-tutorial-part-1-generating.html

Проблема в том, что коллайдеры сетки являются трехмерными коллайдерами; 3D-коллайдеры НЕ МОГУТ сталкиваться с 2D-коллайдерами. В настоящее время в Unity нет 2D-коллайдеров (о которых я знаю), обладающих свойствами меша; Мне нужно динамически изменять 2D-коллайдер, чтобы он соответствовал позициям, содержащим плитки. Как мне разработать эффективную систему 2D-плиток с использованием 2D-коллайдеров?

Вот некоторые из моих идей, которые могут сработать:

  • Добавьте 2D-компонент коллайдера бокса в GameObject чанка для каждой плитки в чанке.
  • Каким-то образом динамически используйте 2D-коллайдер многоугольников, чтобы растянуть все твердые плитки.

Я прочитал несколько тем и не могу найти подходящего решения этой проблемы. Я в основном ищу проверенную технику / подход к этой проблеме, но я открыт для любых предложений или методов. Я рад внести ясность, если это необходимо. Спасибо за любые ответы! Я ценю время, которое вы потратили, чтобы ответить на мой вопрос - это очень помогает!


person Edge Developers    schedule 23.08.2015    source источник
comment
Можно ли преобразовать 2D-коллайдеры в 3D-коллайдеры? Если это так, то вы можете ограничить физику определенными размерами, эффективно форсируя 2D-физику, даже если сетки являются 3D. Дополнительную информацию см. Здесь: stackoverflow .com / questions / 27058919 /.   -  person Eraph    schedule 24.08.2015
comment
Нет. Хотя это было бы хорошим способом решения проблемы, это не сработает. Вы могли бы применить другую физику (например, переместить GameObject) к GameObject, но он все равно не будет конфликтовать с другим измерением, потому что Unity's Physics2d и Physics движки полностью разделены.   -  person Edge Developers    schedule 24.08.2015
comment
Вот почему я предлагаю полностью перейти на 3D, возможно ли это?   -  person Eraph    schedule 24.08.2015
comment
Это возможно, хотя и очень-очень неудобно, и я бы хотел избежать этого маршрута, если это вообще возможно, потому что это двухмерный актив. В худшем случае я бы оставил все как есть, несмотря на неэффективность создания экземпляров большого количества GameObject.   -  person Edge Developers    schedule 24.08.2015
comment
2D-ресурс можно применить к 3D-квадроциклу. Я думаю, единственная трудность, с которой вы столкнетесь, будет заключаться в применении к этому 2D-коллайдера.   -  person Eraph    schedule 25.08.2015
comment
Я знаю, что это применимо к 3D. Мне не нужна дополнительная сложность работы с 3D-коллайдерами для 2D-игры.   -  person Edge Developers    schedule 25.08.2015
comment
Мой первый комментарий связан с объяснением того, как можно ограничить физику только двумя измерениями. 3D модели, 2D игра, 2D физика. Это то, что я делаю в своей нынешней игре, приносит удовольствие.   -  person Eraph    schedule 25.08.2015
comment
Позвольте нам продолжить это обсуждение в чате.   -  person Edge Developers    schedule 25.08.2015


Ответы (1)


Как вы правильно сказали, 2D-коллайдеры не работают с 3D-коллайдерами. Правильный подход - выбрать одно или другое.

Если вы смешиваете 2D и 3D объекты, выбирайте 3D. Вы можете ограничить оси, по которым ваши объекты подвержены влиянию физики, как описано в этом ответе.

person Eraph    schedule 25.08.2015