Anotherwords, тест

Тестирование режима "инвентаря", подбираемых "предметов" и прочих нововведений.

Anotherwords, тест

Решил реализовать местный "инвентарь", как дополнительное, карманное, измерение, куда можно перейти по нажатию Enter. Здесь можно увидеть полупрозрачную версию персонажа и звёздочки, отмечающие слоты "предметов" (или "достижений").

Сундучки-капсулы при открытии стали сообщать о том, что подобран тот или иной "предмет". Каждая "вещь" может выпасть случайной степени редкости (белая, синяя, зелёная, фиолетовая, оранжевая). Полученные "предметы" помещаются в слоты внутри карманного измерения.

геймплейная видеонарезка

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

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

Со слоями связана ещё такая особенность, что спавнить объекты можно как через загрузку "префабов" (метод LoadNode()), так и через создание клонов от уже размещённого и скрытого где-то внутри нужного слоя объекта (через метод Clone()). Второй способ позволяет получать новые копии сразу в нужном слое (что может быть важно, если, например, их все нужно одновременно выключить), а также вносить различные дополнительные изменения в исходник клона, перед самим клонированием. Собственно, первый способ, как правило, требуется для разовой предварительной загрузки объекта, а клонирование для постоянного спавна, например, следов, выстрелов и так далее.

Что касается работы с 3д-текстом - можно обращаться к этим объектам как к узлам, либо к ним же, но как к компонентам текста, если требуется как-то менять саму строку. В целом, чтобы взять всё и сразу, достаточно ссылки на узел, а ссылку на текстовый компонент получить представив узел as TextObject. С другой стороны, одной лишь ссылки на текстовый компонент уже достаточно, ведь если хочется скрыть текст, то можно просто прописать "пустую" строку. Только конкретно в Unigine конструкция "" порождает визуальный баг, чтобы этого не было нужно внутри кавычек поставить пробел - " ". Ну и немного неочевидно выставляется цвет текстового компонента - через 4-вектор, где параметры RGBA выставляются значениями от 0 до 1. Хотя в самом редакторе цвет представлен в шестнадцатеричной записи и в виде диапазонов от 0 до 255.

Что касается батчинга и улучшения производительности для статических мешей - в Unigine предусмотрен такой способ оптимизации однотипной геометрии, как кластеры. По сути это папка с кучей инстансов одного и того же объекта, которые могут иметь разный наклон и скейл. Правда прицельно расставлять отдельные элементы средствами редактора - не совсем удобно, потому как если для точной привязки к координатам достаточно включить примагничивание и поставить мировые координаты вместо локальных, то при вращении элементов очень часто сбиваются углы на какие-то сотые и тысячные доли (то есть поворачиваешь элемент ровно на 90 градусов, а он время от времени сбивается на что-то вроде 89.999). Опять же, нет возможности выделить пачку объектов и ввести прибавку по нужной координате +N, нужно именно вписывать конкретное число, что очень замедляет процесс, так как таким способом можно сдвинуть один объект или линию, но не больше.

Тем не менее, кластеры можно куда более удобно и быстро собирать отдельно, где-нибудь в Blender, а движок затем относительно легко и просто разбирает импортированную модель по наборам однотипных элементов.

88
1 комментарий

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

1
Ответить