当前位置: 首页 > 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; // 清除协程引用}
}

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

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

http://www.lryc.cn/news/370415.html

相关文章:

  • web移动前端网页:深度剖析与未来展望
  • 人脸识别之--计算余弦相似度-android
  • C语言王国——数据的内存管理
  • Kotlin 协程真的轻量吗?
  • Cantata 24.04 全新发布:以代码为中心的测试实现革命性升级!
  • 【问题记录】VMware 17.5.1下载VMware tools失败报错的解决方法
  • Android - RadioGroup中多个radiobutton同时被选中问题
  • 如何在ElementTree文本中嵌入标签
  • C语言宏定义+条件编译
  • python实现自动化测试框架如何进行数据参数化?这个包可以了解下
  • 面试题:Redis和MySql数据库如何保持数据一致性?
  • 直流遥控器 继电器8-10V应用 降压恒压SL3036电源芯片
  • 论文Abstract怎么写
  • PS系统教程19
  • Excel函数之MAP
  • 在2024年WWDC大会上,苹果宣布了其全新的“Apple Intelligence”AI功能以及ISO18功能
  • 解决linux jenkins要求JDK版本与项目版本JDK不一致问题
  • 推荐一款WPF绘图插件OxyPlot
  • 普通表在线重定义为分区表
  • 自动驾驶场景下TCP协议参数优化调整案例分享
  • 奇思妙想:多头RAG
  • H323 截包分析辅流问题
  • 低成本和颜值兼顾的 HomeLab 设备:HPE MicroServer Gen10(二)
  • 面试题:ArrayList和LinkedList的区别
  • 【王树森】深度强化学习(DRL)学习笔记
  • LLM应用实战:当图谱问答(KBQA)集成大模型(三)
  • Django框架中Ajax GET与POST请求的实战应用
  • web前端怎么挣钱, 提升技能,拓宽就业渠道
  • 基于Python的信号处理(包络谱,低通、高通、带通滤波,初级特征提取,机器学习,短时傅里叶变换)及轴承故障诊断探索
  • 大型语言模型智能体(LLM Agent)在实际使用的五大问题