Evelston: way of devil. День иаз. Всё усложняется
Сражаться с демонами всё сложнее. Всё из-за того, что божественная сила покинула нас и теперь каждый бой может стать последним.
Здоровье юнитов
В играх с пошаговыми боями «здоровье» юнитов часто представлено в их количестве. То есть теряя n существ, вы обычно теряете их навсегда. Здоровье же существ не запоминается и восстанавливается в начале каждой биты.
В нашем случае юнит всегда в единственном экземпляре. Поэтому запоминание уровня его здоровья из битвы к битвы выглядит вполне осмысленным. Это заставляет игрока учитывать свои действия, даже если он уверен в своей победе (для минимизации ущерба).
Actors
Стоит отметить, что мы используем фреймворк Actors. Он разрабатывается нашим соотечественником и совершенно бесплатен.
Акторы — это ECS Entity Component System фреймворк со спецификой работы на движке Unity. ECS решает множество задач в написании игр: локальность данных, низкая связанность кода, модульность, потенциально высокая производительность за счет сравнительно простой настройки распараллеливания вычислений.
Введение активной группы персонажей
До этого момента каждый наш бой загружался «с нуля». То есть все существа начинали бой со стартовыми значениями большинства своих параметров. Теперь же здоровье персонажей игрока запоминается. Давайте посмотрим, как это сделано.
Для реализации основной логики используются обработчики. Обработчики — это название для всех систем, менеджеров, контроллеров и "глобальных" скриптов. Из кода видно, что наш обработчик на этапе создания конструктора проверяет есть загруженная группа персонажей. Если группа пуста, мы создаём группу персонажей по умолчанию. Сейчас она состоит из одного персонажа.
После загрузки, мы можем увидеть, что на сцене появились наши персонажи (в данном примере группа состоит из двух персонажей). Они появляются в нулевых координатах и постоянно висят в памяти, для того чтобы не загружать их во время каждого боя.
При столкновении с противником происходит загрузка новых персонажей и настройка персонажей игрока для боя. После мы отправляем сигнал, что бой загружен и далее уже работают скрипты, отвечающие за бой.
Загрузка противников выглядит следующим образом. Находится нужный, заранее созданный префаб персонажа. Для него устанавливаются все необходимые для боя компоненты, после чего происходит настройка остальных параметров.
Для группы игрока производятся похожие действия.
Результат
Вот так выглядит окончание боя. Здоровье наших персонажей изменилось.
А вот так выглядит новый бой, после предыдущего сражения. Как мы видим здоровье сохранилось. К сожалению, хп бары остались. Это связано что раньше они создавались при старте боя и привязывались к персонажу, а когда персонаж выгружался, соответственно и они уничтожались. Так как теперь персонажи игрока остаются, выгрузки хп баров не происходит.
Завершение боя и сохранение всего необходимого — это отдельная тема. В следующий раз я затрону её и конечно же уберу ошибку с остающимися хп барами.