162

Как Construction Script помогает мне в дизайне уровней [UE4]

Всем привет! В этом посте покажу вам как сделать то, что на гифке выше с помощью Blueprints.


В Unreal Engine 4 есть очень классная вещь - Construction Script. Его фишка в том, что он выполняется прямо в редакторе, когда вы размещаете или редактируете ваш объект. Попасть в него можно на том же уровне вкладок, где находится Event Graph, либо в разделе функций вашего блупринта.

Далее рассмотрим Construction Script на примере моей палатки. Он включает две моих функции: Place All Sticks размещает все колышки, а TurnAllRopes поворачивает и скейлит все веревочки.

Чтобы это хорошо работало, я имею (StaticMesh) веревочку длинною 100 юнитов (1 метр) с правильным пивотом. В данном случае, он находится на краю, а сама веревка направлена по локальной оси Х этого меша. Это нужно для того, чтобы дальше было легко поворачивать и скейлить этот объект.

Веревку я привязываю к колышку. Ну, то есть, размещаю "внутри". Таким образом, её координаты будут локальными относительно колышка. А вот вращение для веревки выставляю абсолютным.

У самой палатки я подготовил 8 сокетов, к которым буду "привязывать" веревку.

Теперь вернемся к нашим функциям PlaceAllSticks и TurnAllRopes. На самом деле, в каждой из этих функций просто вызывается 8 раз своя дополнительная функция для единичного случая. То есть, вот на примере с веревками. С колышками то же самое.

Как это работает для единичного случая?


Сначала нам надо воткнуть колышек по уровню лэндскейпа. Тут в дело вступает функция PlaceStick. Она берет на вход колышек, пускает луч по каналу Landscape (это мой собственный канал для ландшафта, но вы можете использовать дефолтный Visibility, если хотите) из точки [локация колышка + 500 по Z] в точку [локация колышка - 500 по Z]. Далее, если произошло столкновение, мы меняем координату Z колышка на точку столкновения.


Я еще добавляю небольшой рандом (поэтому на гифке выше колышки немного трясутся). Понятное дело, вы тут должны учесть пивот вашего колышка. В моём случае он по центру и я могу размещать колышек прямо в точке столкновения луча с ландшафтом.  Если бы пивот был на кончике, я бы просто добавил вектор смещения в эту функцию.

После того, как мы разместили колышек по ландшафту, в дело вступает функция TurnRope. На вход она принимает саму веревку, а также сокет на палатке, в которому мы будем "привязывать" веревку. Тут, конечно, придется засинхронить всё вручную (подобрать к каждой веревке свой сокет).


Напомню, у нас есть веревка, которая расположена в самом колышке. Теперь нам надо её повернуть и изменить длину.


Для поворота есть отличная стандартная функция в Unreal Engine 4 - FindLookAtRotation. Она принимает точку старта (локация нашего объекта) и точку, на которую он должен повернуться (Target). Соответственно, выдает нам Rotation, который мы просто назначаем нашему объекту. Не забываем про то, что в Unreal Engine 4 Forward Vector любого объекта направлен по его локальной оси Х.


(Учтите, в моём примере я всё вычисляю в мировых координатах, потому что мне так удобней!)


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


(На 100 мы делим потому, что наша веревка изначально длиной в 100 юнитов)

Теперь я могу двигать палатку по ландшафту, а её колышки всегда будут подгоняться под окружающий рельеф. Это намного проще, чем выставлять такие вещи вручную для каждой палатки :)


Буду рад, если мой опус кому-нибудь поможет. Спасибо за внимание!

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества