Урок: Время суток - Epic Wiki

# Урок: Время суток

Rate this Article:

4.67

(6 votes)

Approved for Versions:(please verify)

# Contents

# Вступление

Здравствуйте, в данном уроке мы научимся создавать динамические времена суток(день и ночь). Это не сложный процесс, но у вас должны быть базовые знания редактора Unreal Engine 4 и небольшой опыт работы с Blueprint.

# Создание уровня

Создайте новый уровень. (Вы также можете использовать готовый уровень, но убедитесь, что он имеет SkyDome и directional light ). Так же вы можете добавить несколько объектов, что бы увидеть некоторые тени от солнца.

TODTut BaseScene.JPG

# Настройка освещения

Следующий этап данного урока, это настройка освещения. Выберите Dominant Directional Light и перейдите к панели деталей и свойств (details panel).

В блоке "Transform" измените состояние свойства "Mobility" на "Movable.". Это добавит динамические тени на сцену.

TODTut_MovableSun.jpg

Так же, необходимо убрать галочку с "Cast Static Shadows".

# Работа с Blueprint

Чтобы действительно получить динамическое время суток, мы должны использовать Blueprint - необходимо вращать наше "солнце". Вы можете использовать Matinee или Timeline, но здесь мы будем просто вращать наше "солнце" каждый кадр.

TODTut_LevelBlueprint.JPG

# Что делает данный код?

  • Каждый "Тик", или кадр, мы вращаем наше "солнце" на определенный градус;
  • "SUNSPEED" - контролирует скорость, с которой солнце вращается вокруг мира. Умножим его на DeltaTime так, чтобы частота кадров не повлияла на эту скорость. Установка этого значения в 30 дает хорошую скорость.
  • "Update Sun Direction" узел меняет небо, основанный на вращении Солнца. Это функция встроена в класс SkyDome, который должен быть вызван каждый Тик(кадр). (ПРИМЕЧАНИЕ: Вы должны выбрать Skydome в 3D окне, чтобы добавить этот узел в план.) Для получения дополнительной информации об этой функции, проверить класс Skydome.

# Заключительные шаги

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

# Использование динамического Global Illumination

Динамическую систему суток лучше использовать вместе с Global Illumination (GI). Хотя эта функция работает пока еще не в полном объеме, но вы можете найти информацию о ней здесь.

# Поиск и устранение ошибок

# Ничего не происходит, когда я нажимаю играть; Время стоит на месте!

Убедитесь, что вы установили солнцу значение "Movable", и что "Cast Static Shadows" - отключена. Кроме того, убедитесь, что ваш "SUNSPEED" в Blueprint устанавливается в достаточно большое число. (Я рекомендую 30 для отладки.)

# Угол освещения меняется, но видимое солнце не двигается, и небо не меняется от дня к ночи! Или: Есть звезды на небе, даже в течение дня!

Это означает, что вы не создать "Update Sun Direction" узел должным образом в вашем скрипте. Эта функция должна вызываться при каждом тике. Если вы не видите возможность добавить эту функцию, убедитесь, что у вас есть свой ​​skydome.

# Солнце движется слишком быстро!

Скорость солнца контролируется переменной "SUNSPEED" в вашем скрипте. Значение этого параметра устанавливает сколько градусов солнце будет вращаться в одну секунду. Например, при значении "SUNSPEED" в 90, это займет 4 секунды, что бы прошли сутки. Просто сократить это значение, чтобы замедлить движение солнца.

# Изменение среды

В данном коде, мы определяем наше время суток: день это или ночь. Вы можете иметь способ для уровня знать, является ли это ночь или день. Если вы используете Matinee, это довольно легко сделать; просто поставить пользовательские события, чтобы вызвать желаемые результаты. Однако, если вы используете метод, который я продемонстрировал выше, это может быть сложнее.

TODTut_GetSunRotation.JPG

# Краткий обзор:

  • Прежде всего, мы получаем вращение нашей лампы.
  • Затем мы проверяем, если это ниже горизонта.
  • "Ночной Порог" позволяет нам указать на сколько градусов ниже горизонта солнце должно быть, прежде чем мы перейдем на "ночь".
  • Затем мы устанавливаем "Ночь", чтобы отразить наш результат. Теперь мы можем использовать эту переменную, чтобы сделать логические решения.

# Используем переменную "Ночь".

Теперь нам нужно использовать переменную "Ночь". Мы создали некоторые отдаленные события, вызываемый при изменении состояния от дня к ночи:

TODTut_SetupNightEvents.jpg

  • Прежде всего: что "Установить: Night" узел в начале такая же, как самый правый узел от последнего скриншота. (Не добавляйте его снова.)
  • "LastFrameNight" - определяет текущее время суток: день или ночь. Если этого не сделать, то все события связанные со временем суток, вызовутся каждый раз.
  • Затем мы проверяем, время суток и вызываем соответственный удаленный метод

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

TODTut_ChangeTheSun.jpg

# Заключение

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

# Русское сообщество Unreal Engine 4

Русское сообщество Unreal Engine 4

Уроки по Unreal Engine 4 на Русском

Ссылка на русское сообщество

Перевел Дмитрий Кулик

Retrieved from "https://wiki.unrealengine.com/index.php?title=Урок:_Время_суток&oldid=16697"

Categories:

Hidden category: