unity控制场景淡入淡出效果

原理:

在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
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值