原理:
在ui界面添加一个rawimage,选择纯黑色的png格式的图,覆盖整个画布,通过脚本的方式来控制rawimage的透明度,实现场景淡入淡出的效果
函数
插值计算
插值计算Lerp(控件属性,目标,变化时间);
Color.Lerp(_RawImage.color,Color.clear,FloColorChangeSpeed*Time.deltaTime);//yans
实现
/**
*
*
* Title:
* 公共层:场景的淡入淡出
* description:
* [描述]
*
* Date:
*
* version:
*
* modify Recoder:
*
*
**/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Global
{
public class FadeInAndOut : MonoBehaviour
{
public static FadeInAndOut Instance;//本类实例
public GameObject goRawImage;//RawImage对象
public float FloColorChangeSpeed = 1f;
private RawImage _RawImage;//RawImage组件
private bool _BoolScenesToClear = true;//屏幕逐渐清晰
private bool _BoolScenesToBlack = false;//屏幕逐渐模糊
private void Awake()
{
Instance = this;
//如果goRawImage实例化出来了,就添加一个RawImage组件
if (goRawImage)
{
_RawImage = goRawImage.GetComponent<RawImage>();
}
}
//控制淡入
public void SetScenseToClear()
{
_BoolScenesToClear = true;
_BoolScenesToBlack = false;
}
//控制淡出
public void SetScenseToBlack()
{
_BoolScenesToClear = false;
_BoolScenesToBlack = true;
}
//淡入
private void FadeToclear()
{
//运用Color的插值计算
_RawImage.color = Color.Lerp(_RawImage.color, Color.clear, FloColorChangeSpeed * Time.deltaTime);
}
private void FadeToBlack()
{
//运用Color的插值计算
_RawImage.color = Color.Lerp(_RawImage.color, Color.black, FloColorChangeSpeed * Time.deltaTime);
}
private void ScenesToClear()
{
FadeToclear();
if (_RawImage.color.a <= 0.05)
{
_RawImage.color = Color.clear;
_RawImage.enabled = false;
_BoolScenesToClear = false;
}
}
private void ScenesToBlack()
{
_RawImage.enabled = true;
FadeToBlack();
if (_RawImage.color.a >= 0.95)
{
_RawImage.color = Color.black;
_BoolScenesToBlack = false;
}
}
void Update()
{
if (_BoolScenesToClear)
{
//屏幕淡入
ScenesToClear();
}
else if (_BoolScenesToBlack)
{
//屏幕淡出
ScenesToBlack();
}
}//updata_end
}//class_end
}