一、前言
在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了今天就实现一个场景切换的时候淡入淡出的效果。剩下的场景异步加载还有中间过渡场景有时间再写。
先看一下效果
网络异常,图片无法展示
|
二、参考文章
【unity3d 用RawImage组件实现场景淡入淡出】blog.csdn.net/qq_34593121…【Unity 实现背景图片淡入淡出】blog.csdn.net/liuyanlei19…【Unity 启动画面淡入淡出】www.cnblogs.com/wuzhang/p/w…【浅谈Unity淡入淡出的效果的实现】www.cnblogs.com/MoRanQianXi…
三、实现过程
1、搭建场景
网络异常,图片无法展示
|
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; } } 复制代码
把这个脚本挂载到场景中任意物体上
网络异常,图片无法展示
|
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); } } } 复制代码
也挂载到任意物体上
网络异常,图片无法展示
|