当前位置: 首页 > news >正文

⭐Unity 控制任意UI的渐隐渐显

使用脚本之前先给要控制的UI加上CanvasGroup组件

解释:

  • 这个脚本使用协程来逐渐改变CanvasGroupalpha值,从而实现渐隐和渐显的效果。

  • Mathf.Lerp函数用于在指定的时间内平滑地从当前透明度过渡到目标透明度。

  • 通过调用FadeInFadeOut方法,你可以在任何时候启动渐显或渐隐效果。

  • 添加了一个currentFadeCoroutine变量来跟踪当前活跃的协程。

  • 在启动新的渐显或渐隐前,检查并停止已有的协程。

  • 在协程中,如果alpha值已经达到目标值(考虑到浮点数精度),则提前结束循环,避免不必要的计算。

  • 渐变结束时确保alpha值精确设置为目标值,并清除协程引用,确保系统资源得到释放。

using System.Collections;
using UnityEngine;public class FadeCanvasGroup : MonoBehaviour
{public CanvasGroup canvasGroup; // 通过Inspector分配public float fadeInDuration = 2.0f; // 渐显持续时间public float fadeOutDuration = 2.0f; // 渐隐持续时间private Coroutine currentFadeCoroutine; // 当前运行的协程void Start(){// 开始时渐显FadeIn();}public void FadeIn(){if (currentFadeCoroutine != null) StopCoroutine(currentFadeCoroutine);currentFadeCoroutine = StartCoroutine(FadeCanvasGroupRoutine(canvasGroup, canvasGroup.alpha, 1, fadeInDuration));}public void FadeOut(){if (currentFadeCoroutine != null) StopCoroutine(currentFadeCoroutine);currentFadeCoroutine = StartCoroutine(FadeCanvasGroupRoutine(canvasGroup, canvasGroup.alpha, 0, fadeOutDuration));}private IEnumerator FadeCanvasGroupRoutine(CanvasGroup cg, float start, float end, float duration){float counter = 0f;while (counter < duration){counter += Time.deltaTime;cg.alpha = Mathf.Lerp(start, end, counter / duration);// 优化:如果已达到目标透明度,提前终止协程if (Mathf.Approximately(cg.alpha, end)) break;yield return null; // 等待一帧}// 确保最终alpha值精确设置cg.alpha = end;currentFadeCoroutine = null; // 清除协程引用}
}

感谢大家的观看,您的点赞和关注是我最大的动力

不定时更新知识点和干货呦~

相关文章:

  • JDBC从入门到精通-笔记(一):JDBC基本概念与开发基础
  • 构建安全高效的前端权限控制系统
  • Flutter 实现软鼠标
  • 寻找重复数 - LeetCode 热题 100
  • QCombox绑定QMap
  • Map-JAVA面试常问
  • exzxml C语言XML解析库使用记录
  • selenium框架学习
  • Aigtek电压放大器的主要作用是什么
  • 华为手机数据恢复,2个技巧介绍,误删文件后的紧急处理
  • Python界面编辑器Tkinter布局助手 使用体验
  • 目标跟踪——KCF源码用python实现
  • 本地无法连接linux上的MariaDB数据库
  • 好用的便签是什么 电脑桌面上好用的便签
  • 【51单片机基础教程】点亮led
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Angular2开发踩坑系列-生产环境编译
  • Java教程_软件开发基础
  • maya建模与骨骼动画快速实现人工鱼
  • OSS Web直传 (文件图片)
  • PhantomJS 安装
  • Vue2.0 实现互斥
  • 程序员最讨厌的9句话,你可有补充?
  • 关于字符编码你应该知道的事情
  • 基于web的全景—— Pannellum小试
  • 前端面试之CSS3新特性
  • 赢得Docker挑战最佳实践
  • 阿里云移动端播放器高级功能介绍
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #Linux(make工具和makefile文件以及makefile语法)
  • #NOIP 2014# day.1 T2 联合权值
  • $jQuery 重写Alert样式方法
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (02)Unity使用在线AI大模型(调用Python)
  • (java)关于Thread的挂起和恢复
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (剑指Offer)面试题34:丑数
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)Thymeleaf用法——Thymeleaf简介
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转载)从 Java 代码到 Java 堆
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .Net Core 笔试1
  • .NET 中 GetProcess 相关方法的性能
  • .NET下的多线程编程—1-线程机制概述
  • .NET中分布式服务