Плавное затемнение экрана / заливка цветом

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

Добавляем Canvas, параметр Sort Order ставим например на 100, чтобы заливка была поверх остальных элементов. Удаляем Graphic Raycaster, чтобы не блокировался UI рейкаст. Теперь осталось добавить объект Image в наш Canvas, со следующими настойками:

Плавное затемнение экрана / заливка цветом

То есть, чтобы заливка была во весь экран.

Цепляем куда-нибудь скрипт ScreenFader:

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

public class ScreenFader : MonoBehaviour {
	
	public Image image;

	private static Color faderColor;
	private static float maxTime, curTime;
	private static bool isColor, isClear, fade;

	public static void Fader(float time, Color color)
	{
		if(curTime != 0) return;
		isClear = false;
		isColor = false;
		fade = !fade;
		faderColor = color;
		faderColor.a = 1;
		maxTime = time;
	}

	public static void Fader(float time)
	{
		if(curTime != 0) return;
		isClear = false;
		isColor = false;
		fade = !fade;
		faderColor.a = 1;
		maxTime = time;
	}

	void Awake()
	{
		fade = true;
		faderColor = Color.black; // цвет по умолчанию
		image.color = Color.black; // цвет на старте
	}

	void SetClear()
	{
		if(isClear) return;
		faderColor.a = 1 - GetValue();
		image.color = faderColor;
		if(image.color.a <= 0)
		{
			image.color = faderColor;
			isClear = true;
			curTime = 0;
		}
	}

	void SetColor()
	{   
		if(isColor) return;
		faderColor.a = GetValue();
		image.color = faderColor;
		if(image.color.a >= 1)
		{
			image.color = faderColor;
			isColor = true;
			curTime = 0;
		}
	}

	float GetValue()
	{
		float t = 0;
		curTime += Time.deltaTime;
		t = curTime / maxTime;
		return t;
	}

	void Update()
	{
		if(fade) SetColor(); else SetClear();
	}

	public static bool screenColor // true, когда экран полностью закрашен
	{
		get { return isColor; }  
	}
	
	public static bool screenClear // true, когда экран чистый
	{
		get { return isClear; }  
	}
}

Стоит отметить, что переход из одного состояния в другой, возможен только когда выполнен предыдущий запрос.

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

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

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

Офлайн
Vostrugin 2 мая 2017
В таких статьях явно не хватает видео
Офлайн
Artem68 22 ноября 2018
Спасибо боольшое
Офлайн
Hacker228X 3 января 2019
блин ваще топ пасибо
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика