Anotherwords, демоверсия игры на Unigine

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

После нескольких итераций, вот что из этого получилось:

Игра-эксперимент

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

В качестве индикаторов "здоровья" персонажа используются слова (body/mind/hope). Когда один из индикаторов уничтожен, то героя выбрасывает на другую сторону (связанное измерение), где он оказывается заперт на какое-то время, пока показатели не восстановятся.

стандартное измерение
стандартное измерение
другая сторона
другая сторона

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

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

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

Демоверсия

Видеонарезка с моментами геймплея из последней версии 01_05

Скачать демо для Windows 64-bit можно на страничке itch.io (около 230Мб в архиве): https://thenonsense.itch.io/anotherwords

Управление:

WAD - перемещение

S - переключить измерение (на той стороне отключаются возможности стрельбы и быстрого перемещения, кроме того нельзя возвращаться обратно пока не истечёт TIME либо не будет разрушена SEAL, после чего связь восстановится)

E - открыть сундук

Enter - открыть/закрыть измерение "инвентаря"

мышь - управление камерой (колесо регулирует зум)

Левая кнопка мыши - выстрел (или применение вербального оружия на той стороне)

Правая кнопка мыши - быстрое перемещение (или бросок светильника на той стороне)

L - перезапустить мир

P - выход из приложения

О том, как что устроено

В Unigine engine предусмотрен встроенный инструментарий для относительно простого вывода плоскости с текстом в трёхмерное пространство - ObjectText. По сути узел-пустышка со специфическими текстовыми свойствами, доступ к которым из кода можно получить, представив полученную ссылку на узел as ObjectText (либо сразу получая ссылку в формате ObjectText'а, а не узла, если манипуляции со свойствами самого узла не понадобятся).

Далее, если хочется скрыть текст, то можно просто прописать "пустую" строку вместо отключения самого узла. Только конкретно в Unigine конструкция "" порождает визуальный баг, чтобы этого не было нужно внутри кавычек поставить пробел - " ". Цвет текстового компонента задаётся через 4-вектор, где параметры RGBA выставляются значениями от 0 до 1 (хотя в самом редакторе цвет в этом формате не представлен, показывая вместо этого шестнадцатеричную запись, а также настройки цвета с диапазонами от 0 до 255).

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

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

третий уровень, собранный в Blender
третий уровень, собранный в Blender
9 уникальных элементов, из копий которых собран уровень
9 уникальных элементов, из копий которых собран уровень

Поэтому для сборки уровня под кластеры я пользовался Blender'ом, в котором можно куда удобнее и быстрее расставлять элементы. Таким образом, например, второй уровень собран из 3 расклонированных элементов, а третий из 9. Коллайдеры тоже можно было моделить сразу в Блендере, но тут уже разница была не так принципиальна, поэтому расставлял их уже внутри движка.

расстановка коллайдеров (слева), сборка враждебной "рыбы" (справа)
расстановка коллайдеров (слева), сборка враждебной "рыбы" (справа)
Больше картинок

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Вам обычно больше нравятся игры в которых:

  • 33,3%Нужно много читать1
  • 66,7%Не требуется читать ничего2
  • 33,3%Можно вчитываться в некие записки, задания, при желании1
  • 33,3%Чтение присутствует в достаточном количестве, но ненавязчивое1
  • 33,3%Нужно не только читать, но и выбирать варианты на основе прочитанного1
  • 0,0%Текст помогает разобраться в происходящем, но не рассказывает историй0
  • 0,0%Есть текстовые туториалы0
  • 33,3%Всё объясняется картинками, жестами, ассоциациями, а не текстом1
  • 33,3%Есть подробная внутриигровая энциклопедия1
  • 66,7%Вся игра построена исключительно вокруг одного чтения2
  • 33,3%Можно управлять происходящим, с помощью написания текста1
  • 0,0%Есть текст, но совершенно необязательно его читать0
  • 66,7%Текст, так или иначе, интерактивен2
  • 66,7%История формируется и рассказывается невербально2
Источник: https://habr.com/ru/post/568146/


Интересные статьи

Интересные статьи

С версии 2019.3 Unity поддерживает загрузку и выгрузку игры на Unity из нативного приложения для iOS или Android с помощью функции «Unity as a Library». Это удобный спосо...
В обзоре расскажу, почему выбрал именно AMD Ryzen 5 5600X. Где и за сколько его взял. Какую взял Материнку и как её прошить новым BIOS под Ryzen 5000 / ZEN3. А потом проб...
Компании переполнили рынок товаров и услуг предложениями. Разнообразие наблюдается не только в офлайне, но и в интернете. Достаточно вбить в поисковик любой запрос, чтобы получить подтверждение насыще...
Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...
Для своих игр в ASCII-арте я написал библиотеку bear_hug с очередью событий, коллекцией виджетов, поддержкой ECS и прочими полезными мелочами. В этой статье мы посмотрим, как с её помощью сде...