102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| using UnityEngine.Events;
 | |
| using UnityEngine.SceneManagement;
 | |
| using UnityEngine.Serialization;
 | |
| using System;
 | |
| 
 | |
| public class FadeManager : SingletonMonoBehaviour<FadeManager> {
 | |
| 
 | |
|     [SerializeField, FormerlySerializedAs("fadeIn")]
 | |
|     private bool isAutoFadeIn = true;
 | |
|     public Color fadeColor = Color.black;
 | |
|     public UnityEvent onFadeInEnd;
 | |
|     public UnityEvent onFadeOutEnd;
 | |
| 
 | |
|     private Texture2D texture;
 | |
|     private float fadeAlpha = 0.0f;
 | |
|     private bool isFading = false;
 | |
|     public bool IsFading{
 | |
|         get{ return isFading; }
 | |
|     }
 | |
|     private float timer = 0.0f;
 | |
|     private Action<float> fadeFunc = ActionExtensions.EmptyActionFloat;
 | |
| 
 | |
|     void Awake(){
 | |
|         if(CheckInstance()) return ;
 | |
| 
 | |
|         if(isAutoFadeIn){
 | |
|             isFading = true;
 | |
|             fadeAlpha = 1.0f;
 | |
|             this.CallWaitForFrame(2, () => FadeIn(0.5f));
 | |
|         }
 | |
| 
 | |
|         texture = new Texture2D(2, 2, TextureFormat.ARGB32, false);
 | |
|         texture.SetPixel(0, 0, Color.white);
 | |
|         texture.SetPixel(0, 1, Color.white);
 | |
|         texture.SetPixel(1, 0, Color.white);
 | |
|         texture.SetPixel(1, 1, Color.white);
 | |
|         texture.Apply();
 | |
|     }
 | |
| 
 | |
|     void OnGUI(){
 | |
|         if(isFading){
 | |
|             timer += Time.unscaledDeltaTime;
 | |
|             fadeFunc(timer);
 | |
|             fadeColor.a = fadeAlpha;
 | |
|         }
 | |
|         if(fadeAlpha > 0.0f){
 | |
|             DrawTexture(fadeColor);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // alpha 1 to 0
 | |
|     public void FadeIn(float interval = 1.0f){
 | |
|         FadeIn(interval, ActionExtensions.EmptyAction);
 | |
|     }
 | |
|     public void FadeIn(float interval, Action callback){
 | |
|         isFading = true;
 | |
|         timer = 0.0f;
 | |
|         fadeFunc = (t) => {
 | |
|             fadeAlpha = Mathf.Lerp (1.0f, 0.0f, t / interval);
 | |
|             if(t >= interval){
 | |
|                 isFading = false;
 | |
|                 onFadeInEnd.Invoke();
 | |
|                 callback();
 | |
|             }
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     // alpha 0 to 1
 | |
|     public void FadeOut(float interval, Action callback){
 | |
|         FadeOut(interval, callback, fadeColor);
 | |
|     }
 | |
|     public void FadeOut(float interval, Action callback, Color color){
 | |
|         fadeColor = color;
 | |
|         isFading = true;
 | |
|         timer = 0.0f;
 | |
|         fadeFunc = (t) => {
 | |
|             fadeAlpha = Mathf.Lerp (0.0f, 1.0f, t / interval);
 | |
|             if(t >= interval){
 | |
|                 isFading = false;
 | |
|                 onFadeOutEnd.Invoke();
 | |
|                 callback();
 | |
|             }
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     private void DrawTexture(Color color){
 | |
|         GUI.color = color;
 | |
|         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), texture);
 | |
|     }
 | |
| 
 | |
|     public void FadeOutToTransition(float interval, string sceneName){
 | |
|         FadeOut(interval, () => SceneManager.LoadScene(sceneName));
 | |
|     }
 | |
| 
 | |
|     public void Show(){
 | |
|         fadeAlpha = 1.0f;
 | |
|     }
 | |
|     public void Hide(){
 | |
|         fadeAlpha = 0.0f;
 | |
|     }
 | |
| } |