Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Система смены дня и ночи в Unity 3D
emeraldpowder/DayNight
Name already in use
- Local
- Codespaces
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Readme.md
Система смены дня и ночи в Unity 3D
В этом репозитории лежат файлы из туториала по созданию системы дня и ночи с солнцем, луной, и звёздами в Unity 3D.
чтобы скачать все файлы одним архивом, можно нажать Clone or download -> Download ZIP
Unity 5. Смена дня и ночи
При первом запуске Unity 5 вы, наверняка, пробовали изменять угол освещения, который установлен по умолчанию. При этом вы могли заметить, что положение солнца в скайбоксе, а также цвет неба изменяется соответствующим образом. Как видите, Unity 5 уже делает все, что нужно, чтобы создать смену дня и ночи. Нам остается лишь контролировать это вращение с помощью скрипта:
Присоедините этот скрипт к игровому объекту, а затем на месте солнца разместите источник освещения. Скрипт увеличивает значение currentTimeOfDay от 0 до 1 на число секунд, которое мы указываем. Это значение определяет полные 24 часа в игре, где 0 — полночь, 0.25 соответствует восходу солнца, 0.5 — полдень, 0.75 — закат. Как видите, по умолчанию полный рабочий день и ночь занимает 120 секунд. Когда значение достигает 1 , мы сбрасываем его обратно в 0 для начала нового дня.
UpdateSun() — именно та функция, которая двигает солнце. За движение солнца по небу отвечает первая строка кода этой функции. Мы поворачиваем на солнце на 360 градусов вокруг оси X согласно текущему времени суток. Вычтем из этого 90 градусов, чтобы солнце вставало при 0.25 , а не при 0 . С этим значением гораздо проще и удобнее работать. Ось Y определяет, где конкретно на горизонте солнце будет всходить и садиться. Моей пробной игре подходит значение «170», поэтому я выбрал его. Ось вращения Z здесь не задействована.
Остальная часть метода UpdateSun() имеет дело только с интенсивностью нашего Солнца. Мы хотим, чтобы интенсивность солнца была равна 0, когда солнце ниже горизонта, чтобы оно не светило вверх из-под земли, потому что это выглядело бы очень странно. Я также добавил код для увеличения интенсивности света, когда солнце встает и уменьшение, когда солнце садится.
Но, если вы попытаетесь проделать прямо сейчас, и у вас есть какие-то объекты в вашей сцене, то вы увидите, что объекты остаются гореть даже в ночное время, даже если вы пометите их как статические. Это совсем не то, что мы хотим. Давайте исправим это. Добавьте «Reflection Probe» на сцену, установите его тип в «Real Time» и режим обновления равным «Every frame» (каждый кадр):
Остальные настройки не имеют значения. «Time slicing» — это просто настройка производительности.
Теперь любой статический объект, который вы добавляете на сцену, будет правильно освещен, но динамические объекты по-прежнему не получат правильное освещение. Но мы также можем это исправить. Добавьте «Light Probe Group» на сцену. Вам не нужно изменять настройки для этой работы. Он работает в автоматическом режиме. Теперь даже динамические объекты будут должным образом освещены вашим динамическим солнцем.
Вы, возможно, захотите подправить настройки и расположение объектов, чтобы все выглядело отлично. Но все это зависит от настроек вашей сцены. Я добавил ссылки на официальную документацию для отражающих и освещающих объектов в нижней части этого учебника. Там очень много информации, изучите ее, если вы столкнулись с проблемами.
Только что мы сделали смену ночи и дня, но вы, наверное, заметили часы на изображении в верхней части этого урока. Я добавил их потому что, на мой взгляд, было бы круто в реальном времени увидеть текущее время при смене освещения. Сейчас я покажу вам, как я это сделал (код и часы также включены в папку проекта). Часы мы с вами уже делали в уроке Создание часов в Unity.
Тем не менее, часы – это всего лишь объект, похожий на обычные часы, но с другим простым скриптом внутри. Можно, да даже и нужно, смоделировать 3D-модель часов в отдельном приложении, но для этого урока я сделал их прямо в Unity, просто соединив кубы и цилиндрические фигуры воедино. Единственно важные элементы часов – это стрелки, показывающие текущее время. Нам нужно иметь возможность ссылаться на них через скрипт и они должны иметь возможность вращаться на 360 градусов вокруг оси в центре циферблата. Что касается скрипта часов, то вот он:
Здесь все довольно просто. Сначала мы задаем сколько часов в сутках и сколько минут в часе. Затем мы определяем на сколько градусов нужно повернуть часовую и минутную стрелки, чтобы перейти к следующему часу/минуте. В Update() мы получаем значение переменной currentTimeOfDay (которон является числом с плавающей точкой в диапазоне от 0 до 1 ) из DayNightController и умножаем на значения, которые мы вычислили, чтобы получить текущие час и минуту. Затем поворачиваем часовую и минутной стрелки циферблата в соответствии с этими значениями. Очевидно, что мы могли бы сделать здесь и секундную стрелку, но секунды проходят так быстро, что я решил заморачиваться с ними. Этот скрипт также полностью прокомментирован в архиве проекта.
Если вы внимательно изучали скрипт DayNightController вы, возможно, заметили публичную переменную timeMultiplier. С ее помощью можно менять скорость наступления дня и ночи. Я добавил небольшой скрипт для моей сцены, который позволяет мне ускорить или замедлить время, используя клавиши W и S или ↑ и ↓ . Также я добавил элемент Bloom, чтобы это выглядело новее и добавил некое количество твёрдых сферических тел, чтобы показать, что с динамическими движущимися объектами всё работает отлично. Излучающиеся части часов также показывают, как классно выглядит освещение в Unity 5
Вы можете посмортеть, что мы сотворили в Unity web-плеере или скачать всю папку проекта.
Здесь находится официальная документация о Reflection Probes , а на этой странице вы можете почитать о группе световых зондов .
Unity: Creating a day-night cycle
![]()
In some games, it is useful to have a day and night cycle. For example, In Mystery Queen, the creatures of the world behave differently depending on the time of day, e.g., Slimey is only active when the sun is up, and goes to sleep at dusk.
In this guide, I’ll discuss how to create a day-night cycle with the lighting system in Unity 2D, so that you can incorporate similar systems in your game! Similar to my previous guide on creating a translucent effect, I will be walking through the steps here, and also providing downloadable Unity packages (Step 0, Steps 1–5) and a Github page. Since we’ll be changing project settings, Step 0 (the initial setup) and later steps will be in separate projects. The projects and code have been created to be easier to understand over efficiency, so you may want to do some optimizations and customizations for your own project.
The screenshots below are from Unity 2019.4, so if you’re using a different version, the menus may not be exactly the same.
Step 0: Setting up the scene in Unity
We’re going to set up a scene in Unity with a single NPC: a wolf. Similar to our last guide, we’re using freely-available sprites from the Liberated Pixel Cup (LPC). In this case, we’re using sprites from the [LPC] Wolf Animation. For the purposes of this guide, we won’t be having any player character, so there won’t be any way for a player to interact with the scenes.
We’ll set up our wolf, Charlie Wolf, with 3 animations: idle, sleep, and asleep. For now, Charlie Wolf will remain in the idle state, where he will dance endlessly. We will allow Charlie Wolf to sleep once we have a day-night cycle.
Step 1: Switching to the Universal Render Pipeline
To set up Unity’s Universal Render Pipeline (URP) to your project, you can refer to this official guide. I had some issues setting it up myself, so I figured that it’ll be good to walk you through the steps I took.
Step 1a: install the Universal Render Pipeline package. You can do so via Window → Package Manager…
Смена дня и ночи
Для создания эффекта смены дня и ночи, мы воспользуемся стандартным шейдером, конечно звезд с неба он не хватает, точнее их там вообще нет. Тем не менее, для наших задач он вполне подходит. Кстати говоря, для многих игр такой шейдер будет в самый раз, например, для игр с видом сверху, когда неба мы не видим, а нужен только источник света. Если у вас подобный проект, то нижеприведенный способ подойдет, вообще без каких-либо дополнительных доработок. Главная задача, это привязка времени к положению солнца на небе, направлению теней и т.п. То бишь, если мы видим время, например — 12.00, значит и солнце должно быть в зените.
Итак, всё что нам нужно, это небольшой скрипт:
Регулируя переменную currentTime, мы можем устанавливать текущие время суток.
Где 12:00 это 0.5f.
Есть еще один вариант, с использованием сторонних скайбоксов. Суть в том, чтобы плавно менять один скайбокс на другой, дневной на ночной. Возможно кому-то этот способ пригодится. Для него понадобиться специальный шейдер, который можно скачать тут . Там тоже никаких сложностей, указываем текстуры дневные и для ночи, затем через скрипт регулируем смешивание.