- 1. Импортировать GameTime.unitypackage.
http://dl.dropbox.com/u/8203557/GameTim ... itypackage (9 Мб)
2. Создать новый слой (Layer) под названием «Sky». В нём будет рендериться небо (в виде скайбокса) и всё, что по нему летает.
3. Настроить главную камеру:
― параметр Clear Flags установить в Don't Clear;
― в параметре Culling Mask выбрать всё, кроме слоя «Sky»;
― параметр Depth установить в 1.
4. К главной камере добавить дочернюю «Sky camera»:
― параметр Clear Flags установить в Skybox;
― в параметре Culling Mask выключить всё, оставив только слой «Sky»;
― убедиться, что параметр Depth = 0 или просто меньше, чем у главной камеры;
― добавить скрипт SkyCameraController;
― удалить ненужные компоненты GUILayer, Flare Layer и Audio Listener.
5. Поместить на сцену префаб GameTime:
― для него и для всех его дочерних объектов установить слой «Sky»;
― в параметре Player Camera указать главную камеру;
― в параметре Attached To указать объект, вокруг которого будут вращаться объекты на небе. Скорее всего, это будет First Person Conroller или 3rd Person Controller;
― в параметре Day Cycle In Minutes указать длительность игровых суток в реальных минутах. Этот параметр можно менять в рилтайме, чтобы ускорить или замедлить течение игрового времени.
Time Of Day Transitions ― это список переходов: ночь->утро, утро->день, день->вечер, вечер->ночь. Для каждого перехода задаётся время его начала (Start Hour), длительность (Duration In Hours) и набор параметров, управляющих всякими настройками окружающей среды.
Например: Start Hour = 17, Duration In Hours = 1, Sun Intensity = 0.3 означают, что начиная с 17:00 по игровому времени, в течение 1 часа интенсивность солнца будет плавно меняться со своего предыдущего значения до значения 0.3.
Time In Hours ― начальное время в игровых часах.
Initial State Index ― начальное состояние окружающей среды (индекс в списке Time Of Day Transitions).
Например, если мы хотим начать игру в полночь, надо выставить Time In Hours = 0 (0 часов, 0 минут), Initial State Index = 0 (ночь). Если хотим начать игру в 15:30, то выставляем Time In Hours = 15.5 (15 часов, 30 минут), Initial State Index = 2 (день).
6. Настроить скайбокс:
Открыть Edit ―> Render Settings и параметр Skybox Material установить в Blended Sky.
Вроде всё.
---------------------------------------------
Пример проекта, созданного с нуля на основе GameTime.unitypackage
http://dl.dropbox.com/u/8203557/GameTime/GameTime.zip (12 Мб)
---------------------------------------------
Пример повеселее:
F ― полный экран
левый Shift ― ускорение времени
---------------------------------------------
Описание настроек окружающей среды:
Ambient Light (color) ― фоновое освещение
Skybox Blend Value (float) ― смешивание ночного и дневного скайбоксов. 0 ― ночь, 1 ― день
Skybox Tint Color ― дополнительный оттенок для скайбокса
Fog Color ― цвет тумана
Fog Density (float) ― плотность тумана
Sun Color ― цвет источника света солнца
Sun Intensity (float) ― интенсивность источника света солнца
Sun Tint Color ― дополнительный оттенок (и прозрачность) плашки с текстурой солнца
Moon Tint Color ― дополнительный оттенок (и прозрачность) плашки с текстурой луны
Параметры Aux Color 1 и Aux Color 2 (color) ― дополнительные. Сами по себе ничего не делают, но их значения можно считывать и для чего-нибудь использовать. Например, в сцене с островом я использовал Aux Color 1, чтобы вручную менять цвет воды в зависимости от времени суток:
EnvironmentState envState = gameTime.GetCurrentEnvironmentState();
Color waterColor = envState.auxColor1;
oceanScript.SendMessage("SetWaterColor", waterColor);
Если сделать облака, можно задействовать Aux Color для управления цветом облаков.
---------------------------------------------
Вероятно полезные функции класса GameTime:
int GetSeconds() ― возвращает количество секунд, прошедшее с начала дня.
int GetDaysPassed() ― возвращает количество прошедших дней; счётчик увеличивается ровно в полночь.
EnvironmentState GetCurrentEnvironmentState() ― возвращает текущее состояние окружающей среды:
public class EnvironmentState
{
public float skyboxBlendValue;
public Color skyboxTintColor;
public Color fogColor;
public float fogDensity;
public float sunIntensity;
public Color sunColor;
public Color sunTintColor;
public Color ambientLight;
public Color moonTintColor;
public Color auxColor1, auxColor2;
}
Описание скриптовых файлов:
GameTime.cs ― основной скрипт, который считает время, крутит луну и солнце и меняет параметры окружающей среды.
SizeController.cs ― вешается на плашки луны и солнца. Когда они низко над горизонтом, делает их чуть крупнее.
SkyCameraController.cs ― вешается на камеру, рисующую небо. Отключает на этой камере туман и ставит большой ambient-свет, от которого зависит яркость луны.
SkyGlowController.cs ― вешается на большую оранжевую плашку, которая имитирует зарю/закат. Регулирует её прозрачность в зависимости от высоты над горизонтом.
|