Переехали на новый сайт!



Главная » Файлы » Unity3D » Скрипты

Изображение
GameTime - Смена времени суток 4.1.0
24 Декабря 2014, 15:42
  • 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 ― вешается на большую оранжевую плашку, которая имитирует зарю/закат. Регулирует её прозрачность в зависимости от высоты над горизонтом. 

Категория: Скрипты | Добавил: Unit | Теги: sky, time, game time
Просмотров: 1593 | Загрузок: 0 | Рейтинг: 5.0/2
Всего комментариев: 0
avatar