【Unity3D日常开发】(十四)Unity3D中实现场景切换的时候淡入淡出的效果

举报
恬静的小魔龙 发表于 2021/10/24 18:24:05 2021/10/24
【摘要】 推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 一、前言  在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。  比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不...

推荐阅读

一、前言

  在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。
  比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了。
   今天就实现一个场景切换的时候淡入淡出的效果。
   剩下的场景异步加载还有中间过渡场景有时间再写。

先看一下效果
在这里插入图片描述

二、参考文章

【unity3d 用RawImage组件实现场景淡入淡出】https://blog.csdn.net/qq_34593121/article/details/82107113
【Unity 实现背景图片淡入淡出】https://blog.csdn.net/liuyanlei1990/article/details/72853307
【Unity 启动画面淡入淡出】https://www.cnblogs.com/wuzhang/p/wuzhang20150524.html
【浅谈Unity淡入淡出的效果的实现】https://www.cnblogs.com/MoRanQianXiao/p/7691790.html

三、实现过程

1、搭建场景

在这里插入图片描述
新建一个RawImage

2、编写脚本

FadeInOut.cs

using UnityEngine;
using UnityEngine.UI;//注意添加RawImage命名空间

public class FadeInOut : MonoBehaviour, IFadeInOut
{
    [HideInInspector]
    public bool isBlack = false;//不透明状态
    [HideInInspector]
    public float fadeSpeed = 1;//透明度变化速率
    public RawImage rawImage;
    public RectTransform rectTransform;

    void Start()
    {
        rectTransform.sizeDelta = new Vector2(Screen.width, Screen.height);//使背景满屏
        rawImage.color = Color.clear;
    }

    void Update()
    {
        if (isBlack == false)
        {
            rawImage.color = Color.Lerp(rawImage.color, Color.clear, Time.deltaTime * fadeSpeed * 0.5f);//渐亮
            //之所以这么写主要是因为Lerp函数的原因,具体详解可以看这篇文章
            //【Unity中Lerp的用法】https://blog.csdn.net/MonoBehaviour/article/details/79085547
            if (rawImage.color.a < 0.1f)
            {
                rawImage.color = Color.clear;
            }
        }
        else if (isBlack)
        {
            rawImage.color = Color.Lerp(rawImage.color, Color.black, Time.deltaTime * fadeSpeed);//渐暗
            if (rawImage.color.a > 0.9f)
            {
                rawImage.color = Color.black;
            }
        }
    }

    //切换状态
    public void BackGroundControl(bool b)
    {
        if (b == true)
            isBlack = true;
        else
            isBlack = false;
    }
}

把这个脚本挂载到场景中任意物体上
在这里插入图片描述
然后新建一个测试脚本test.cs

using UnityEngine;

public class test : MonoBehaviour
{
    public FadeInOut m_Fade;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            m_Fade.BackGroundControl(true);
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            m_Fade.BackGroundControl(false);
        }
    }
}

也挂载到任意物体上
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。