Смена дня и ночи

Для создания эффекта смены дня и ночи, мы воспользуемся стандартным шейдером, конечно звезд с неба он не хватает, точнее их там вообще нет. Тем не менее, для наших задач он вполне подходит. Кстати говоря, для многих игр такой шейдер будет в самый раз, например, для игр с видом сверху, когда неба мы не видим, а нужен только источник света. Если у вас подобный проект, то нижеприведенный способ подойдет, вообще без каких-либо дополнительных доработок. Главная задача, это привязка времени к положению солнца на небе, направлению теней и т.п. То бишь, если мы видим время, например - 12.00, значит и солнце должно быть в зените.


Итак, всё что нам нужно, это небольшой скрипт:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class DayNight : MonoBehaviour {

	public Text _gameTime; // вывод текста
	public Transform directionalLight; // основной источник света
	public float fullDay = 120f; // сколько длиться день, в секундах
	[Range(0,1)] public float currentTime; // текущее время суток

	private float h, m;
	private string hour, min;

	void Start()
	{
		_gameTime.text = "00:00";
	}

	void Update()
	{
		TimeCount();

		currentTime += Time.deltaTime / fullDay;

		if(currentTime >= 1) currentTime = 0; else if(currentTime < 0) currentTime = 0;

		directionalLight.localRotation = Quaternion.Euler((currentTime * 360f) - 90, 170, 0);
	}

	void TimeCount()
	{
		h = 24 * currentTime;
		m = 60 * (h - Mathf.Floor(h));

		if(m < 10) min = "0" + (int)m; else min = ((int)m).ToString();
		if(h < 10) hour = "0" + (int)h; else hour = ((int)h).ToString();

		_gameTime.text = hour + ":" + min;
	}
}

Регулируя переменную currentTime, мы можем устанавливать текущие время суток.
Где 12:00 это 0.5f.

Скачать демо:

Внимание! Посетители, находящиеся в группе Гости, не могут скачивать файлы.


П.С.

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

Например, так:

public Skybox skybox;
[Range(0,1)] public float blend;

void Update()
{
	skybox.material.SetFloat("_Blend", blend);
}

Комментариев 2

Офлайн
SkyAngel 14 августа 2016
Спасиб) оч толково сделано
Офлайн
LagunVictor 14 марта 2016
Спасибо бро)
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика