WallConstructor - создание стен на ходу

» опубликован
» Категория: Моделирование
» Язык: C#
Читай на DevTribe.ru!

Как я уже писал негде в комментариях - потихоньку буду запиливать на XGM инструменты из своего проекта.
Однако хотел бы отметить что данный инструмент делался исключительно в личных целях и очень не советую идти против системы, используя генератор не по назначению - наткнетесь на баги - виноваты сами.
Ну а моей обязанностью будет проинструктировать, как этим правильно пользоваться.
» Спойлер
В нашем проекте мы продолжаем серию уже существующей игры, но переводим мир из изометрии в 3D. Вот пример "куска" одной из локаций.
Как вы видите - есть разного рода кирпичные стены - прямые, переходящие в лестницы, дугообразные и прочая нечисть. В данном куске стена это часть "обрыва", но как соль - Unity не дает нам возможности в генерации подобных мелочей. Так как нашей целью является дотошное копирование мы вынуждены постоянно прыгать между Maya/3D Max и движком, что в таких случаях довольно-таки неудобно. Потому мы и создаем разного рода инструменты для генерации мешей прямо в юньке - чтобы из-за простого изменения дуги не приходилось снова прыгать в экспорте/импорте. А с условием что моделлер и геймдизайнер разные люди - такие мелочи неприятно затягивают дело.

Быстрый старт

Для начала скачайте архив, приложенный здесь. Откройте и закиньте содержимое в папку Assets вашего проекта.
В вашем проекте после рекомпила появится пункт меню "GameObject/Create Advanced/Wall Constructor".
Нажмите его, и приступим.
На сцене создался новый игровой объект "Wall". В инспекторе у этого объекта есть несколько свойств, которые отвечают за параметры стены в целом. Настройте их по своему усмотрению.
В принципе, как только вы поставили объект у вас уже почти все заполнено для тестирования. Нужно только самому выбрать материалы для стены.
После того, как вы все установили нажмите кнопку "Начать редактирование".
Обратите внимание - внутри нашего объекта "Wall" есть еще два объекта, пронумерованные как 1 и 2.
Выберите объект 2 - он считается концом стены.
Подвиньте его куда захотите. Собственно вот наша стена и растянулась.
При выборе этой второй точки - в инспекторе появляется кнопка "Продолжить стену". Нажмите на нее и создастся еще одна точка.

Теперь переключитесь обратно на точку "2". Данная точка теперь не находится с краю и может быть использована как центр кривой. Нажмите кнопку "Сделать центром кривой" в инспекторе. После нажатия ваша стена преобразится в кривую.
Теперь вернитесь на точку 3.
Предположим, что вам нужно изменить высоту стены в данной точке.
Подкрутите немного ползунок "Смещение высоты" вверх или вниз и стена деформируется.
После того как вы закончили генерацию меша, нажмите обратно на объект Wall и нажмите "Закончить редактирование".
Теперь нажмите "Удалить компонент". Как вы видите все вложенные объекты были удалены, появилось два компонента - MeshRenderer и MeshFilter, а наш компонент был удален.

Инструкция - подробней и по порядку

Новый объект создается через пункт меню "GameObject/Create Advanced/Wall Constructor".

Точки

Разные точки в генераторе имеют разную специфику. Порядок точек точно такой же как отображается в иерархии.
Итак:
  • первая точка - не может быть преобразована - вы можете только двигать ее
  • из последней точки вы можете создавать "продолжение"
  • промежуточные точки вы можете преобразовать в точки кривых, но две точки кривых не могут идти подряд
Настоятельно не советую изменять имена точек, так как имя последней точки переводится в число, для того чтобы новая точка была следующей в иерархии.
Точки имеют поле "Высота смещения", которое влияет на то, насколько смещается высота относительно общей величины, указываемой в самом компоненте-генераторе.

Генератор

Сам генератор имеет следующие поля:
  • Высота - влияет на высоту стены, что логично. Эта величина складывается со смещением у точки и образуется финальная высота. Не советую выставлять поля так, чтобы в сумме они давали минус.
  • Толщина
  • Размер развертки - если текстуру нужно пропорционально увеличить в размере
  • Материал сбоку
  • Материал сверху - верхняя часть меша немного отличается по рисунку со всей остальной частью стены, потому тут текстура указывается отдельно
  • Сглаживание кривых - указывает через сколько Unity-единиц в кривых должен создаваться новый полигон. Очень не рекомендую слишком уменьшать этот параметр - вызовет это дикие лаги. Да и в сути такая точность не нужна.
Перед тем как изменять точки включите генератор кнопкой "Начать редактирование". Когда вы заканчиваете с редактированием ОБЯЗАТЕЛЬНО отключите редактирование по кнопке - каждый кадр меш генерируется заново, пока вы не сделаете этого. Данная фича была сделана исключительно для удобства, но доставляет вот такой казус - не стоит про нее забывать и отключать когда вы ей не пользуетесь.
Если при сохранении вашей локации на ней остается значок звездочки после имени - посмотрите внимательно, возможно вы забыли выключить генерацию.
Когда вы окончательно сгенерировали меш - удалите компонент-генератор по соответствующей кнопке. ОБЯЗАТЕЛЬНО удаляйте его кнопкой, а не вручную - он автоматически делает дополнительную работу по удалению дочерних объектов и отображению скрытых компонентов.


Просмотров: 5 085

Tiodor #1 - 3 года назад 1
вах! это как раз то что мне сейчас надо! спасибо)
отличная статья)
RSQR #2 - 3 года назад 0
Этот скриптик можно адаптировать под модульное строительство? Окошечки добавить там всякие, использовать как конструктор зданий, скажем?)
Devion #3 - 3 года назад (отредактировано ) 1
RSQR, не советовал бы, так как развертка рассчитана именно на стены. У зданий она будет выглядеть крайне криво между этажами, в дверных проемах и окошках.
Но реально написать такой инструмент самому. В его создании нет ничего сложного, достаточно ознакомиться с процедурной генерацией мешей и придумать как вам будет удобней эти здания редактировать - как вы будете добавлять окошки, дверные проемы, новые этажи у зданий. Если волнует вопрос, можно ли это взять за базис - да можно. Но переделать придется довольно много.
Зато если оставить от скриптов только генерацию верхней части стены и сместить ее вниз - ее можно использовать как инструмент для создания дорог, если вас это утешит
Бтв, картинка с превью, в ресурс фул не добавлял :)
прикреплены файлы
RSQR #4 - 3 года назад 0
Extravert:
RSQR, не советовал бы, так как развертка рассчитана именно на стены. У зданий она будет выглядеть крайне криво между этажами, в дверных проемах и окошках.
Но реально написать такой инструмент самому. В его создании нет ничего сложного, достаточно ознакомиться с процедурной генерацией мешей и придумать как вам будет удобней эти здания редактировать - как вы будете добавлять окошки, дверные проемы, новые этажи у зданий. Если волнует вопрос, можно ли это взять за базис - да можно. Но переделать придется довольно много.
Зато если оставить от скриптов только генерацию верхней части стены и сместить ее вниз - ее можно использовать как инструмент для создания дорог, если вас это утешит
Ясно. Это всё, что я хотел узнать)
velmir #5 - 3 года назад 2
тож златогоре было?
Devion #6 - 3 года назад 1
velmir, угадал по скрину :) Да, делаем продолжение Златогорья.
А почему "тоже"? Кроме нас никто вроде этот проект не делает. Если о ком и слышали, вероятно это мы и были.
Кет #7 - 3 года назад (отредактировано ) 2
Extravert, блин, а я подумал, Арканум =/
P. s. Велмир, видимо, написал «тож» в смысле «то ж», а не в смысле «тоже».
lentinant #8 - 3 года назад 0
По идее, если поковыряться в коде, можно заточить этот ассет под создание рельефной дороги для игр типа Trials.