Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class DayNightController : MonoBehaviour {
// Направляющий свет, которым мы управляем как наше солнце.
public Light sun;
// Количество реальных секунд в один полный игровой день.
// Установите это на 86400 для 24-часового дня в реальном времени.
public float secondsInFullDay = 120f;
// Значение, которое мы используем для расчета текущего времени суток.
// Переход от 0 (полуночи) до 0,25 (восход солнца), 0,5 (полдень), 0,75 (закат) до 1 (полночь).
// Мы определяем, какое значение должно быть восход солнца, и т. Д., Но я думал, что эти
// Значения хорошо соответствуют. И теперь большая часть скрипта жестко привязана к этим значениям.
[Range(0,1)]
public float currentTimeOfDay = 0;
// Множитель других сценариев может использовать для ускорения и замедления прохождения времени.
[HideInInspector]
public float timeMultiplier = 1f;
// Получите первоначальную интенсивность солнца, чтобы мы это помним.
float sunInitialIntensity;
void Start() {
sunInitialIntensity = sun.intensity;
}
void Update() {
// Обновляет вращение и интенсивность солнца в соответствии с текущим временем суток.
UpdateSun();
// Это приводит к тому, что currentTimeOfDay переходит от 0 до 1 в количестве секунд, которые мы указали.
currentTimeOfDay += (Time.deltaTime / secondsInFullDay) * timeMultiplier;
// Если currentTimeOfDay равно 1(полуночи), установите его на 0, чтобы мы начали новый день.
if (currentTimeOfDay >= 1) {
currentTimeOfDay = 0;
}
}
void UpdateSun() {
// Поворачиваем солнце на 360 градусов вокруг оси x в соответствии с текущим временем суток.
// Мы вычитаем на 90 градусов от этого, чтобы солнце поднялось на 0,25 вместо 0.
// Я просто нашел, что с ним работать легче.
// Ось Y определяет, где на горизонте солнце поднимется и установится.
// Ось z ничего не делает.
sun.transform.localRotation = Quaternion.Euler((currentTimeOfDay * 360f) - 90, -30*Mathf.Sin(2*Mathf.PI*currentTimeOfDay), 45);
// Ниже определяется интенсивность солнца в соответствии с текущим временем суток.
// Вы заметите, что я жестко закодировал кучу значений здесь. Это были только ценности
// Я чувствовал себя лучше. Очевидно, это можно сделать настраиваемым пользователем.
// Также с некоторым более умным кодом вы можете иметь разную длину для дня и
// ночь тоже.
// Солнце полно интенсивности в течение дня.
float intensityMultiplier = 1;
// Установите интенсивность 0 в ночную ночь.
if (currentTimeOfDay <= 0.23f || currentTimeOfDay >= 0.75f) {
intensityMultiplier = 0;
}
// Угасаем на солнце, когда он поднимается.
else if (currentTimeOfDay <= 0.25f) {
// 0.02 - это время между восходом солнца и временем, когда мы начинаем исчезать
// интенсивность (0,25-0,23). Разделив 1 на это значение, получим 50.
// Это говорит о том, что мы должны затухать в интенсивности в 50 раз быстрее, чем
// время проходит, чтобы иметь возможность идти от 0 до 1 интенсивности в том же количестве
// время, когда переменная currentTimeOfDay переходит от 0,23 до 0,25. Таким образом, мы получаем
// совершенное увядание.
intensityMultiplier = Mathf.Clamp01((currentTimeOfDay - 0.23f) * (1 / 0.02f));
}
// И исчезаем, когда он устанавливает.
else if (currentTimeOfDay >= 0.73f) {
intensityMultiplier = Mathf.Clamp01(1 - ((currentTimeOfDay - 0.73f) * (1 / 0.02f)));
}
// Умножьте интенсивность солнца в зависимости от времени суток.
sun.intensity = sunInitialIntensity * intensityMultiplier;
}
}
using System.Collections;
public class DayNightController : MonoBehaviour {
// Направляющий свет, которым мы управляем как наше солнце.
public Light sun;
// Количество реальных секунд в один полный игровой день.
// Установите это на 86400 для 24-часового дня в реальном времени.
public float secondsInFullDay = 120f;
// Значение, которое мы используем для расчета текущего времени суток.
// Переход от 0 (полуночи) до 0,25 (восход солнца), 0,5 (полдень), 0,75 (закат) до 1 (полночь).
// Мы определяем, какое значение должно быть восход солнца, и т. Д., Но я думал, что эти
// Значения хорошо соответствуют. И теперь большая часть скрипта жестко привязана к этим значениям.
[Range(0,1)]
public float currentTimeOfDay = 0;
// Множитель других сценариев может использовать для ускорения и замедления прохождения времени.
[HideInInspector]
public float timeMultiplier = 1f;
// Получите первоначальную интенсивность солнца, чтобы мы это помним.
float sunInitialIntensity;
void Start() {
sunInitialIntensity = sun.intensity;
}
void Update() {
// Обновляет вращение и интенсивность солнца в соответствии с текущим временем суток.
UpdateSun();
// Это приводит к тому, что currentTimeOfDay переходит от 0 до 1 в количестве секунд, которые мы указали.
currentTimeOfDay += (Time.deltaTime / secondsInFullDay) * timeMultiplier;
// Если currentTimeOfDay равно 1(полуночи), установите его на 0, чтобы мы начали новый день.
if (currentTimeOfDay >= 1) {
currentTimeOfDay = 0;
}
}
void UpdateSun() {
// Поворачиваем солнце на 360 градусов вокруг оси x в соответствии с текущим временем суток.
// Мы вычитаем на 90 градусов от этого, чтобы солнце поднялось на 0,25 вместо 0.
// Я просто нашел, что с ним работать легче.
// Ось Y определяет, где на горизонте солнце поднимется и установится.
// Ось z ничего не делает.
sun.transform.localRotation = Quaternion.Euler((currentTimeOfDay * 360f) - 90, -30*Mathf.Sin(2*Mathf.PI*currentTimeOfDay), 45);
// Ниже определяется интенсивность солнца в соответствии с текущим временем суток.
// Вы заметите, что я жестко закодировал кучу значений здесь. Это были только ценности
// Я чувствовал себя лучше. Очевидно, это можно сделать настраиваемым пользователем.
// Также с некоторым более умным кодом вы можете иметь разную длину для дня и
// ночь тоже.
// Солнце полно интенсивности в течение дня.
float intensityMultiplier = 1;
// Установите интенсивность 0 в ночную ночь.
if (currentTimeOfDay <= 0.23f || currentTimeOfDay >= 0.75f) {
intensityMultiplier = 0;
}
// Угасаем на солнце, когда он поднимается.
else if (currentTimeOfDay <= 0.25f) {
// 0.02 - это время между восходом солнца и временем, когда мы начинаем исчезать
// интенсивность (0,25-0,23). Разделив 1 на это значение, получим 50.
// Это говорит о том, что мы должны затухать в интенсивности в 50 раз быстрее, чем
// время проходит, чтобы иметь возможность идти от 0 до 1 интенсивности в том же количестве
// время, когда переменная currentTimeOfDay переходит от 0,23 до 0,25. Таким образом, мы получаем
// совершенное увядание.
intensityMultiplier = Mathf.Clamp01((currentTimeOfDay - 0.23f) * (1 / 0.02f));
}
// И исчезаем, когда он устанавливает.
else if (currentTimeOfDay >= 0.73f) {
intensityMultiplier = Mathf.Clamp01(1 - ((currentTimeOfDay - 0.73f) * (1 / 0.02f)));
}
// Умножьте интенсивность солнца в зависимости от времени суток.
sun.intensity = sunInitialIntensity * intensityMultiplier;
}
}
надо это время привязать к московскому времени, как посоветуете это сделать?