Evelston: way of devil. День иаз. Всё усложняется

Evelston: way of devil. День иаз. Всё усложняется

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

Здоровье юнитов

В играх с пошаговыми боями «здоровье» юнитов часто представлено в их количестве. То есть теряя n существ, вы обычно теряете их навсегда. Здоровье же существ не запоминается и восстанавливается в начале каждой биты.

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

Actors

​Классный бесплатный фреймворк. Советуем - <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fgithub.com%2FPixeyeHQ%2Factors&postId=127261" rel="nofollow noreferrer noopener" target="_blank">https://github.com/PixeyeHQ/actors</a>
​Классный бесплатный фреймворк. Советуем - https://github.com/PixeyeHQ/actors

Стоит отметить, что мы используем фреймворк Actors. Он разрабатывается нашим соотечественником и совершенно бесплатен.

Акторы — это ECS Entity Component System фреймворк со спецификой работы на движке Unity. ECS решает множество задач в написании игр: локальность данных, низкая связанность кода, модульность, потенциально высокая производительность за счет сравнительно простой настройки распараллеливания вычислений.

Введение активной группы персонажей

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

Для реализации основной логики используются обработчики. Обработчики — это название для всех систем, менеджеров, контроллеров и "глобальных" скриптов. Из кода видно, что наш обработчик на этапе создания конструктора проверяет есть загруженная группа персонажей. Если группа пуста, мы создаём группу персонажей по умолчанию. Сейчас она состоит из одного персонажа.

​Загрузка группы персонажей по умолчанию
​Загрузка группы персонажей по умолчанию

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

Загруженная группа персонажей игрока
Загруженная группа персонажей игрока

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

​Общая загрузка всех необходимых персонажей
​Общая загрузка всех необходимых персонажей

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

​Загрузка персонажей с которыми произошло столкновение
​Загрузка персонажей с которыми произошло столкновение

Для группы игрока производятся похожие действия.

​Настройка персонажей из группы игрока
​Настройка персонажей из группы игрока

Результат

Вот так выглядит окончание боя. Здоровье наших персонажей изменилось.

​Окончание первого боя
​Окончание первого боя

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

​Начало второго боя
​Начало второго боя

Завершение боя и сохранение всего необходимого — это отдельная тема. В следующий раз я затрону её и конечно же уберу ошибку с остающимися хп барами.

Начать дискуссию