Как стать автором
Обновить

SuperIndustry — Dev log #2 – Добро пожаловать в темный лес

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 1.1K

Краткое содержание:

  • Вступление

  • Сюжет

  • Где брать картинки?

  • Инвентарь

  • Взаимодействие между механизмами

  • Механизмы

  • В следующем выпуске

Вступление

Привет, друзья! В этом цикле статей я максимально подробно буду рассказывать о процессе разработки игры на UE – SuperIndustry. Вы сможете на моем примере познать процесс разработки 3D игры на UE. Вкратце про игру: Представьте гибрид Oxygen not included и Satisfactory, в далеком будущем и на специфичной экзо планете. В игре будет простенький сюжет, который будет повествоваться через своеобразный дневник. Главная цель – улететь с планеты (остановиться на достигнутом) или же продолжить общение с высшим Существом и узнать, что будет дальше.

Предыдущая часть

Первая часть

Сюжет

Он будет основан на моральном выборе и высшем Существе.

Завязка сюжета: В 2930 году началась разработка варп‑двигателей, позволяющих двигаться быстрее скорости света. После серии испытаний в 2990г, в 5 световых годах от Солнечной системы загадочным образом появилась крайне нестабильная звезда, которая постоянно становится массивнее и периодически испускает гамма‑лучи все большей силы. Как она появилась, причину нестабильности и откуда берет энергию можно будет узнать чуть позже после начала игры. Спустя 5 лет в 2995 году, смертоносные лучи стали сравнимы по мощности с квазарами и их появление стало крайне частым. Один из таких лучей вылетел в сторону Земли. По прогнозам, луч настигнет Землю к 3000 году. Людям нужно найти экзо планету для переселения. Для этого игрока отправляют на потенциального кандидата (планету) в 20св. годах от Солнечной системы.

По прилету, у персонажа начинаются проблемы с психикой. Случайные звуки, галлюцинации, на экране игрока появляются артефакты. Когда персонаж начинает сходить с ума, с ним связывается высшее существо по имени Син. Син может изменять события, которые вот‑вот произойдут. Кто скрывается под этим именем и откуда такие способности, можно будет узнать по ходу игры. Син сможет разговаривать с персонажем нотками эмоций. Например, вместо «Не делай так», Син ответит «отрицание». Диалог можно будет вести либо после события/выбора, либо перед. Изначальная цель — спасти человечество, но в процессе игры она может измениться; по желанию игрока.

Во время игры будут происходить различные ситуации. Например, выбор: спасти богатых / спасти всех / не спасать никого. Или же: рассказать о галлюцинациях и Син / ничего не рассказывать. Игрок должен будет предпринять решение согласно своим моральным принципам и характеру. Если неправильный выбор был сделан несколько раз, Син может разочароваться в персонаже и игра закончится на плохой концовке. Игра даст 2 шанс, но если провалить и его, то сохранение удалится. Выборы игрока влияют на характер персонажа. От его характера зависят варианты ответов в ключевых моментах сюжета.

По поводу Син. Она поможет персонажу открыть парадоксальные технологии, разобраться в себе и переменить ход событий в особо важных ситуациях. Для достижения результатов, нужно чтобы персонаж стремился к этому; верил в себя; был непоколебим; был бескорыстен и благодарен помощи Син (Син сможет помочь влиянием на текущие события и изменением дальнейших). Все эти качества должен воспитать в персонаже игрок. Характер, моральное состояние, настрой, осадок от недавних событий — все это отразится на вариантах ответа при общении с Син. В зависимости от выбираемых ответов, у персонажа будут меняться цели, принципы, характер. Цель персонажа — найти планету для переселения и доложить об этом, а цель игрока — дать этому случится (или нет). Именно игрок управляет персонажем, изменяет его характер, и отвечает за последствия. Общение будет происходить не обычным диалогом, а нотками эмоций. Персонаж должен будет сообщить не то, что думает, а то, что чувствует.

Где брать картинки?

Для каждого предмета в игре нужна картинка, которую будет видеть игрок в ячейке инвентаря. Для усложнения испытания, я не буду брать уже готовые, а сделаю сам. (или не совсем =) )

Моим главным помощником будет Stable diffusion. Это нейросеть для генерации картинок по текстовому описанию, дополнению уже готовых картинок и много чего еще. Я собираюсь нарисовать очертания предмета, а потом довести его до идеала через нейросеть.

Сейчас нужно установить нейросеть. Изначально она создавалась под Linux и видеокарты Nvidia, но чуть позже после выхода появился способ запуска на Windows и видеокартах AMD. Чтобы запустить нейросеть на AMD, нужно преобразовать ее в Onnx. Изначально я хотел установить оптимизированную версию от basujindal, но она не поддерживает преобразование в Onnx, поэтому я решил установить эту версию вместе с UI от azuritecoin.

Начнем с портрета Син. Я сгенерировал через txt2img режим ~30 портретов девушек, затем остановился на этой картинке.

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

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

Теперь на очереди — иконки для ископаемых. Пока их будет 4: для железной, медной, оловянной руды и угля. Из 74 сгенерированных картинок не было ни одной подходящей под руду. Нужно сделать иконку самому.

Для этого я взял вот эту картинку и превратил ее в «текстуру».

Сейчас нужно найти модельку камня и наложить нашу «текстуру». Этот подойдет.

https://skfb.ly/6twon
результат
результат

Перекрашивая картинку, можно сделать текстуру для медной, оловянной и т. п. руд. А для разнообразия, можно поворачивать текстуру по различным осям в 3D редакторе.

Медная руда
Медная руда

С текстурой олова все оказалось несколько сложнее. Оловянная руда — хромированная, по этому не получится просто наложить перекрашенную текстуру железной руды.

Для эффекта переливания, в блендере нужно настроить материал.

Блюпринты в блендере
Блюпринты в блендере
Рендер
Рендер

Такой результат меня не устроил. Можно попробовать использовать Matcap материалы. Вкратце про Matcap: это способ имитации материала и параметров окружающего освещения в сцене с помощью только одного изображения.

Matcap’ы по умолчанию
Matcap’ы по умолчанию

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

С иконками руд – все
С иконками руд – все

Осталась иконка для каменного угля. Ее можно сделать по такому же принципу.

Сразу же сделаем и иконки для слитков. С ними все оказалось намного легче. Через img2img не составило труда получить вот такой слиток из наброска.

Набросок
Набросок
Результат
Результат

Теперь с помощью графического редактора нужно сделать иконки для медного и оловянного слитка. Для этого, мы просто изменим цветовую палитру этой картинки

Медный слиток
Медный слиток
Оловянный слиток
Оловянный слиток

С иконками мы закончили, пора делать инвентарь.

Инвентарь

Статья названа именно в честь него.

Начнем с инвентаря дрели. Как его реализовать, я не имею ни малейшего представления ¯\_(ツ)_/¯

Посмотрев часть серии туториалов, я составил такую схему

По этой схеме мы реализуем инвентарь.

Файлы инвентаря, ячейки и предмета созданы. Теперь добавим инвентарь к механизму.

Попытка 1

Добавим инвентарь к C++ классу карманной дрели. Для этого я создал C++ файл инвентаря и добавил его так же, как и виджет (Blueprint файл инвентаря невозможно добавить к C++ классу). Дальше нужно было добавить таблицу со всеми предметами, она так же должна была быть реализована на C++. И тут тупик. Нельзя вычленить кириллицу из C++ файла (опыт из предыдущего выпуска).

Попытка 2

Попробуем добавить инвентарь к blueprint файлу механизма. Я не стал так делать изначально, т. к. не понимал, как потом с этим взаимодействовать. Озарение пришло очень скоро. Модифицировав механику для взаимодействия с механизмом, стало возможным получение информации из блюпринта с механизмом. Эта модификация открыла всё. Теперь не нужно писать геттеры (функции для получения информации) в C++ классах механизмов и кучи кастов в блюпринтах. Достаточно объявить переменную в блюпринте механизма. Сейчас можно выводить названия механизмов на кириллице, а так же добавлять инвентарь.

‑--‑--‑-

Начнем с реализации компонента инвентаря. Компонент в Unreal engine это фича, которую можно прописать один раз, а потом добавлять к различным объектам (Например, персонажу или механизму).

Во время его создания ничего интересного не произошло.

Теперь добавим этот компонент к механизму и создадим виджет ячейки. В ячейке будет отображаться предмет из таблицы предметов.

Вот так выглядит таблица с предметами:

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

Теперь нужно добавлять добытые карьером руды в инвентарь персонажа. т. е. добавить компонент инвентаря к персонажу и сделать UI инвентаря персонажа. А так же, в зависимости от редкости предмета — менять цвет рамочки.

Фундаментальный — предметы, из которых создается другие предметы/механизмы.

Составной — простые механизмы.

Сложно‑структурный — сложные механизмы (требующие настройки). Например, ядерный реактор.

Непостижимый — Крайне сложные механизмы или их части. Например, варп двигатель.

Парадоксальный — Мистические механизмы/предметы, доступные только в эндгйеме. Например, создатель червоточин/генератор на черной дыре.

Инвентарь карьера
Инвентарь карьера

Теперь необходимо доделать базовые функции инвентаря – деление предметов, быстрое перемещение из инвентаря в инвентарь и отображение информации о предмете при наведении на него.

Базовые функции инвентаря доделаны.

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

Мини хранилище
Мини хранилище

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

UI хранилища
UI хранилища

Создание инвентаря заняло очень много времени. Было много моментов, которые нельзя было сразу разрешить. На данный момент, это самая сложная механика в игре. Функциональность инвентаря будет расширяться при необходимости с новыми механизмами.

Взаимодействие между механизмами

Начнем с передачи и приема энергии. Создадим для этого 2 функции. Самая интересная — функция передачи энергии. На вход ей будет подаваться список всех подключенных к сети механизмов. Задача в том, чтобы распределить накопленную энергию между ними.

Все механизмы работают на энергии. Когда механизмы научились принимать энергию, ее нужно научиться расходовать. Для этого создадим функцию работы. Если механизм включен, то должно выполняться какое‑то действие и убавляться энергия.

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

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

Механизмы

Мини хранилище. Имеет 30 слотов.

Карманная дрель была переименована в “мини карьер”.

В следующем выпуске

Работа механизмов, механики сюжета.

Туман изнурения
Туман изнурения

Новый выпуск - https://habr.com/ru/articles/754558/

Теги:
Хабы:
0
Комментарии 0
Комментарии Комментировать

Публикации

Истории

Работа

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн