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;
|
|
}
|
|
} |