【Unity3D日常开发】Unity3D中实现场景切换的时候淡入淡出的效果
开发 实现 效果 场景 切换 时候 Unity3D 日常
2023-09-11 14:19:57 时间
推荐阅读
一、前言
在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。
比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很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);
}
}
}
也挂载到任意物体上
相关文章
- (高级篇 Netty多协议开发和应用)第十章-Http协议开发应用(基于Netty的HttpServer和HttpClient的简单实现)
- 敏捷开发实现测试自动化的6个步骤
- 《用于物联网的Arduino项目开发:实用案例解析》—— 第2章 互联网连接 2.1 学习目标
- 《iOS 9应用开发入门经典(第7版)》——第2章,第2.4节小结
- 《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 第2章 iframe实现模拟异步交互
- 《Xcode实战开发》——2.4节导航器区域
- 《HTML5 开发实例大全》——1.7 实现下拉弹出效果
- 《HTML5 开发实例大全》——1.14 使用< meter >标记元素实现百分比效果
- 《HTML5 开发实例大全》——1.19 实现树节点效果
- iOS 开发之模糊效果的五种实现
- 微信小程序云开发轻松实现用户openid的获取
- iOS 10 的一个重要更新-开发 iMessage 的第三方插件
- 【Unity3D日常开发】 实现物体一闪一闪的效果,霓虹灯效果,跑马灯效果,LED灯
- 【Unity3D日常开发】Unity3D中实现场景的淡入淡出效果
- 全栈开发实战|名片管理系统的设计与实现(SSM + JSP)
- Android开发:使用ViewDragHelper实现抽屉拉伸效果
- 从0开发游戏引擎之引擎2D基类CUI类实现