//从淡入到淡出 public static void FadeInToOut(float _fadeInTime, float afterInDelayTime, float _fadeOutTime, CallBack afterFadeInCallback = null, CallBack afterFadeOutCallback = null, float delay = 0, bool isForceAlpha = false) { CameraFadeData data = GetCameraFadeData(CameraFadeType.FadeIn, isForceAlpha, delay, _fadeInTime, afterFadeInCallback); CameraFadeData data2 = GetCameraFadeData(CameraFadeType.FadeOut, isForceAlpha, afterInDelayTime, _fadeOutTime, afterFadeOutCallback); Instance.StartFadeFunc(data, data2); }
private void RunComplete(CameraFadeData data) { if (data.completeCallBack != null) { data.completeCallBack(); } if (currentFadeDatas.Contains(data)) { currentFadeDatas.Remove(data); cacheData.Add(data); } }
private static CameraFadeData GetCameraFadeData(CameraFadeType fadeType, bool isForceAlpha, float delay, float fadeTime, CallBack completeCallBack) { CameraFadeData data = null; if (cacheData.Count > 0) { data = cacheData[0]; cacheData.RemoveAt(0); } else { data = new CameraFadeData(); } data.SetCameraFadeData(fadeType, isForceAlpha, delay, fadeTime, completeCallBack); return(data); }
private void StartFadeFunc(params CameraFadeData[] paras) { if (currentFadeDatas.Count > 0) { foreach (var item in currentFadeDatas) { if (item.completeCallBack != null) { item.completeCallBack(); } cacheData.Add(item); } currentFadeDatas.Clear(); } for (int i = 0; i < paras.Length; i++) { currentFadeDatas.Add(paras[i]); } CameraFadeData data = paras[0]; if (data.isForceAlpha) { if (data.fadeType == CameraFadeType.FadeIn) { alpha = 0; } else { alpha = 1; } } else { if (isFading) { data.delay = 0; } } isFading = true; float tempTime = data.fadeTime * alpha; data.tempFadeCaculateTime = tempTime; }
// Update is called once per frame private void Update() { if (currentFadeDatas.Count == 0) { isFading = false; return; } CameraFadeData data = currentFadeDatas[0]; if (data.delay > 0) { data.delay -= Time.deltaTime; return; } if (data.fadeType == CameraFadeType.FadeIn) { if (data.tempFadeCaculateTime >= data.fadeTime) { alpha = 1; RunComplete(data); return; } data.tempFadeCaculateTime += Time.deltaTime; } else { if (data.tempFadeCaculateTime <= 0) { alpha = 0; RunComplete(data); return; } data.tempFadeCaculateTime -= Time.deltaTime; } alpha = data.tempFadeCaculateTime / data.fadeTime; }
//淡出 public static void FadeOut(float fadeTime, CallBack completeCallBack = null, bool isForceAlpha = false, float delay = 0) { CameraFadeData data = GetCameraFadeData(CameraFadeType.FadeOut, isForceAlpha, delay, fadeTime, completeCallBack); Instance.StartFadeFunc(data); }