当前位置: 首页> 财经> 金融 > ⭐Unity 控制任意UI的渐隐渐显

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

时间:2025/7/14 12:09:25来源:https://blog.csdn.net/weixin_53501436/article/details/139633464 浏览次数:0次

使用脚本之前先给要控制的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; // 清除协程引用}
}

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

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

关键字:⭐Unity 控制任意UI的渐隐渐显

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: