15

Алгоритм строительства кубов в ue4, как в 3d max.

Я всё же решил превращать прототип про леммингов на механизмах (https://pikabu.ru/story/lemmingi_na_mekhanizmakh_za_4_chasa_6371866) в полноценную игру.

Т.к. по плану в игре должен быть редактор карт. Ландшафт нужен ровный для удобного размещения механизмов. Решил дать возможность игроку строить кубы произвольных пропорций и размеров, и чтобы это было просто на уровне 3Д Макса. Без использования массивов (т.е. если строится 1 куб, то он и должен быть одним) и процедурных статик мешей (просто не люблю их, но при желании алгоритм можно адаптировать и под них).

Что получилось можно посмотреть на видео. Текстура в клеточку для удобства, на самом деле кубы цельные (в конце видео есть пруфы).

Делюсь реализацией.


В unreal engine 4 есть функция GetHitUnderCursor, которая позволяет определить над чем висит указатель мышки. Если есть плоский, горизонтальный статикмеш/плейн за который курсор может зацепиться, то можно начинать строить кубы произвольных пропорций, но со скейлом по Z равным 1. Для этого достаточно смотреть разницу в координатах курсора между началом строительства (на скриншотах start) и текущим положением (на скриншотах finish) и после небольшой калибровки (зависит от размеров изначального меша) задавать новый scale.

Однако есть проблема… т.к. пивот объекта в центре, то при изменении скейла объект будет «плыть». Следовательно, корректируем его локацию. Определяем вектор направления между стартом и финишем и берём половинное от пройденного расстояния. Готово.


Скриншоты удобно увеличивать, кликая по ним колёсиком.

С плоскостью понятно, а как же определять вертикаль? Заранее разместить вертикальную сетку/меш/плейн на уровне? А если игрок посмотрит влево, и она уйдёт из кадра? Решено спавнить сетку прямо перед лицом игрока всегда держа её перпендикулярно камере. Лучше сделать её невидимой для игрока… а то мозг начинает тупить, когда координатная ось двигается вместе с камерой.

Можно подобный трюк проделать и с горизонтальной сеткой. Но я решил обойтись. Всё равно в редакторе нужен какой-то ориентир и горизонтальная, статичная сетка хорошо справляется с этой ролью.

На скриншоте ниже алгоритм скалирования по Z. В целом он мало отличается от скалирования по X и Y.

Я считаю, что blueprint очень легко читается даже теми, кто им никогда не пользовался, так что адаптировать алгоритм под другие языки не должно быть чем-то сложным.


Где можно применить? В первую очередь в простых редакторах 3д уровней. Если же хочется дать игроку полный контроль над кубами (выдавливание, удаление участка куба, создание окон и т.п. ), то лучше использовать или массивы или процедурные меши (хотя часть с невидимой вертикальной сеткой всё равно пригодится).

В стратегиях с разметкой территории (cityskiline, rimworld, two point hospital и т.п.) тоже лучше использовать массивы. Однако, например, для строительства процедурного небоскрёба лучше подойдёт единый куб.


Кстати, откапал старый пак графики, купленный ещё хз когда. Добавил своего (толкатель с кнопкой пока ещё не сделал) и попробовал всё это накидать на уровень из скриншота предыдущего поста. Вот, что получилось.

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества