Rooten. Дневник разработки, часть 3

Rooten. Дневник разработки, часть 3

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

Кстати, если вы не знакомы с этим проектом, то можно почитать вот эту часть дневников, чтобы составить для себя представление, о чём вообще речь. Также можно подписаться на КАНАЛ ИГРЫ в Телеграме: там я довольно часто выкладываю небольшие посты о проделанной работе.

Ну а мы продолжим!

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

Как же этого добиться, особенно с учётом того, что я вообще не программист, а аниматор? Конечно же, анимациями! В Unity аниматоре нашлось всё, что мне было нужно: и возможность управлять практически любыми параметрами объектов, и плавные переходы между анимациями (они же состояния), где длительность этого перехода задаётся просто числом, без необходимости анимировать переходное состояние.

Короче говоря, я решил разрулить всё unity-анимациями. И начал, конечно, с солнышка.

Rooten. Дневник разработки, часть 3

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

Ну а сейчас о звуке. Сперва я нашёл общий эмбиент, который должен служить своего рода подложкой, связывая все оттенки атмосферы воедино. Потом нашёл и доработал отдельные эмбиенты для утра, дня, вечера и ночи (всё взято с freesound и довольно сильно переработано в audacity).

Rooten. Дневник разработки, часть 3

Я не придумал ничего лучше, как сразу разместить все нужные эмбиенты, и просто управлять их громкостью тем же unity-аниматором. Скорее всего, это не очень изящное и дорогое по ресурсам решение… Но я не программист, и просто делаю, как умею.

Rooten. Дневник разработки, часть 3

Идея в том, что, к примеру, днём громкость утреннего, вечернего и ночного эмбиента нулевая. Вечером уже дневной уходит в ноль, и проявляется вечерний. Кстати, скорость перехода одного эмбиента в другой гораздо выше, чем «скорость солнца». Получается, что животные замечают, что наступает ночь раньше, чем игрок. И сова начинает ухать несколько раньше, чем солнце окончательно сядет. Что, в принципе, выглядит и звучит реалистично: сначала начинает меняться звуковое настроение, и потом — освещение.

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

Теперь всё готово, осталось только научить игру с этим всем работать. Переключать освещение и музыку. И тут на помощь пришла такая замечательная штука, как Event system (надеюсь, я правильно сказал и не перепутал определения). Короче, ивенты. События. Можно буквально парой строк кода запустить событие в любой нужной ситуации. Самое прекрасное, что «наполняем» мы эти события уже без кода, из редактора. И можно много чего сделать: включить-выключить какой-либо объект, вызвать скрипт. Или, что мне и нужно сейчас, переключить анимацию.

Rooten. Дневник разработки, часть 3

У меня вот, например, тикает таймер, в котором отдельно задана продолжительность каждого времени дня. По окончанию срабатывает ивент. И ивент переключает состояние анимации. Вроде всё просто.

А главное — работает, и создаёт именно тот эффект, которого я и добивался!

Если вы дочитали до этого момента — надеюсь, вам было интересно, а может быть, даже полезно. Если же есть вопросы или пожелания, то добро пожаловать в комментарии. Я всегда рад ответить и пообщаться.

Спасибо за внимание, и до новых встреч!

1818
18 комментариев

Не уверен, что подход со звуком эффективен. Есть audio mixer как раз для решения таких задач 

1
Ответить

Да я вот тоже не уверен. Просто сделал то, о чём знал ) Спасибо за наводку, кстати.

Ответить

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

AnimationCurve - есть такая штука в юнити эдиторе, кривые прямо на игровом объекте. не нужно создавать Анимации, Контроллер анимаций, файлы, пыпки, стейты и т п. Просто привязываешь смену к курве и паре стейтов из самой игры и получается гораздо проще. Рекомендую попробовать один раз, скажем так что анимациями такое делать из разряда микроскопом забивать гвозди

1
Ответить

В случае с углом поворота кривую использовать проблемно. Если только как нелинейную скорость изменения угла 

Ответить

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

Ответить

Интересно, конечно

Ответить