Эффект затемнения/расцветания экрана

Части и запчасти к проектам, дополнительное программное обеспечение.

Эффект затемнения/расцветания экрана

Сообщение Receptor 26 ноя 2012, 11:15

Простенький скрипт. Писал для себя. Может кому-то пригодится. Суть его проста: устанавливает положение затемнение экрана, или делает плавное затухание в темноту или обратно :)

Не требует какой-либо привязки к камере и т.п. Не нужно использовать постороние текстуры, гуи всякие. Просто создать пустой ГО в сцене и повесить скрипт на него. Настроить переменные по вкусу.

Есть пять "состояний":
In - Баланс стремится с установленной скоростью в затемнение (по окончанию стремления автоматически становится InEnd)
Out - Баланс стремится с установленной скоростью в расцветание (по окончанию стремления автоматически становится OutEnd)
InEnd - Баланс устанавливает в полное затемнение
OutEnd - Баланс устанавливает в полное расцветание
Stop - Пауза стремления баланса / Текущего состояния

Сам скрипт:
Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;

public class ScreenFader : MonoBehaviour {
       
        public enum FadeState { In, Out, Stop, InEnd, OutEnd }
       
        Texture colorTexture;
              Color fadeColor = Color.black;

        [HideInInspector] public float fadeBalance;

        public FadeState fadeState;
       
        public float fadeSpeed;     // Скорость стремления баланса

        public float fromInDelay;    // Мнимые задержки перед началом процесса затемнение/расцветания
        public float fromOutDelay;
       
        void Awake () {
                                       
                Texture2D nullTexture = new Texture2D(1,1) as Texture2D;
                nullTexture.SetPixel(0,0, Color.black);
                nullTexture.Apply();

                colorTexture = (Texture)nullTexture;
               
                fadeBalance = (1 + fromInDelay);


        }
       
        void Update(){
               
                fadeColor.a = fadeBalance;

                if(fadeBalance > (1 + fromInDelay)){
                        fadeBalance = (1 + fromInDelay);
                        fadeState = FadeState.InEnd;
                }
               
                if(fadeBalance < -(0 + fromOutDelay)){
                        fadeBalance = -(0 + fromOutDelay);
                        fadeState = FadeState.OutEnd;
                }
               
               
                switch (fadeState){
                       
                        case FadeState.In:
                                fadeBalance+=Time.deltaTime*fadeSpeed;
                        break;
                       
                        case FadeState.Out:
                                fadeBalance-=Time.deltaTime*fadeSpeed;
                        break;
                       
                        case FadeState.Stop:
                                fadeBalance -= 0;
                        break;
                       
                        case FadeState.InEnd:
                                fadeBalance = (1 + fromInDelay);
                        break;
                       
                        case FadeState.OutEnd:
                                fadeBalance = -(0 + fromOutDelay);
                        break;
                }
               
        }

        void OnGUI() {

                GUI.depth = -2;
                GUI.color = fadeColor;
                GUI.DrawTexture(new Rect(0,0,Screen.width, Screen.height), colorTexture, ScaleMode.StretchToFill, true);

        }
}



 


Из любого другого скрипта можно управлять этим очень просто, достаточно менять значение переменной состояния затемнения - fadeState.

Например:
Синтаксис:
Используется csharp

public ScreenFader screenFader;

//
//

if(Input.GetKeyDown(KeyCode.Return)){
   screenFader.fadeState = ScreenFader.FadeState.In; // Если нажать "Энтер", то экран гаснет
}



 


Вот :D
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск

Re: Эффект затемнения/расцветания экрана

Сообщение MicroSLAV 03 дек 2012, 19:55

Большое спасибо!!! Работает как часы! В сочетании с меню (которое ещё в добавок и выдвигается справа на лево) выглядит эффектоно \m/
Скрытый текст:
ВК: Вячеслав Горюнов
Skype: microslav18
MaxCinema Corp Лабиринт 3D 2
MicroSLAV
UNIт
 
Сообщения: 139
Зарегистрирован: 14 июн 2012, 11:34
Skype: microslav18

Re: Эффект затемнения/расцветания экрана

Сообщение AndreyMust19 03 дек 2012, 20:13

Боже, а нельзя просто менять альфа-канал равномерно черной текстуры? А то какие-то SetPixel, DrawTexture.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Эффект затемнения/расцветания экрана

Сообщение Avatarchik 03 дек 2012, 21:46

Он это и делает) В старте создает текстуру в 1 пиксель черного цвета.
Потом растягивает во весь экран и меняет ей альфу ;)
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Эффект затемнения/расцветания экрана

Сообщение Receptor 29 дек 2012, 19:16

Именно :)
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск

Re: Эффект затемнения/расцветания экрана

Сообщение Huruffus 31 мар 2013, 00:16

Пригодилось, спасибо!

За счёт какой строки возможно затемнение всего GUI ?
_ttp://rebirthgame.tumblr.com/
@jonarhipov
vk.com/jonarhipov
_jonarhipov@gmail.com
Huruffus
UNITрон
 
Сообщения: 174
Зарегистрирован: 02 июл 2012, 20:53
  • Сайт

Re: Эффект затемнения/расцветания экрана

Сообщение Angel 07 31 мар 2013, 09:10

За счет уменьшения значения для GUI.depth. Например, -3 поставить, или -5. В зависимости от того, где сам GUI рисуется.
_ttp://shekn.deviantart.com/
Аватара пользователя
Angel 07
UNIверсал
 
Сообщения: 367
Зарегистрирован: 02 окт 2010, 18:58

Re: Эффект затемнения/расцветания экрана

Сообщение Patico 24 май 2013, 11:40

Супер!
Отдельное спасибо за хак с SetPixel :-bd
:) Live UI Tiles for Unity - Живие плитки Windows 8 для Unity 3D - _ttp://www.assetstore.unity3d.com/#/content/7858
:) Screen Fader - Fade-in и Fade-out экрана в одну строчку кода! - _ttp://www.assetstore.unity3d.com/#/content/9526
Аватара пользователя
Patico
UNец
 
Сообщения: 20
Зарегистрирован: 23 май 2013, 11:19

Re: Эффект затемнения/расцветания экрана

Сообщение commandoby 01 июл 2013, 20:34

Кусочек от скрипта пригодился. Спасибо. :-bd
Аватара пользователя
commandoby
UNIт
 
Сообщения: 64
Зарегистрирован: 28 июн 2012, 22:33
Откуда: Пинск.Беларусь
Skype: commando_by
  • Сайт

Re: Эффект затемнения/расцветания экрана

Сообщение GogDzilla 04 мар 2014, 15:18

Ваш скрипт уже на пиратских сайтах
Аватара пользователя
GogDzilla
UNIт
 
Сообщения: 111
Зарегистрирован: 01 янв 2014, 11:38
Откуда: Россия,Волгоград,Ул Калужская дом 7
Skype: Фифа

Re: Эффект затемнения/расцветания экрана

Сообщение Valentinus 26 май 2017, 09:19

привет из 2017-го!

пытался использовать ваш скрипт, но при запуске сцены экран сразу черный и все.
оказалось что в Start надо добавить fadeState= FadeState.Out;
кстати, fadeSpeed задается в единицах обратных времени эффекта, т.е. чтоб затухало 5 секунд, надо задать 1/5, т.е. 0.2f;

вопрос:
какие параметры надо задать в
public float fromInDelay; // Мнимые задержки перед началом процесса затемнение/расцветания
public float fromOutDelay;
в каких единицах? задаю 3 - получаю примерно 10секунд. 0_0

и по-моему они перепутаны - если я задаю
float fromInDelay=0;
float fromOutDelay=3;
то задержка получается при затухании, при осветлении ее нет, и наоборот.
другое мое творчество: samlib.ru/u/us_w/
Аватара пользователя
Valentinus
Старожил
 
Сообщения: 889
Зарегистрирован: 24 мар 2017, 18:33

Re: Эффект затемнения/расцветания экрана

Сообщение Valerich 10 авг 2017, 15:53

И мне понравился, хороший скрипт. Настроить можно под многое) :-bd
Аватара пользователя
Valerich
UNITрон
 
Сообщения: 328
Зарегистрирован: 07 сен 2016, 11:24

Re: Эффект затемнения/расцветания экрана

Сообщение sl0vvman 24 фев 2022, 14:53

Привет, когда пробую вызвать из кода выскакивает ошибка: NullReferenceException: Object reference not set to an instance of an object. Может подскажите что неправилно сделал, сам код:
public ScreenFader screenFader;

if (Input.GetKeyDown(KeyCode.G))
{
screenFader.fadeState = ScreenFader.FadeState.In;
}
sl0vvman
UNец
 
Сообщения: 1
Зарегистрирован: 24 фев 2022, 14:50


Вернуться в Компоненты (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3