U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 10 章 · UI 界面系统
/
第 159 课
LESSON 159 · UI 界面系统
UI 动画(淡入淡出/移动)
UI 动画已掌握。下一课做生命值血条。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 10 章 · UI 界面系统
📍 第 159 / 300 课
课程进度
159 / 300
🎯
本节学习目标
掌握 CanvasGroup
实现淡入淡出
实现滑入滑出
🚀
课程导读
“菜单淡入、提示滑出”让游戏界面有质感。本课给 UI 加动画。
◆
CanvasGroup 与淡入淡出
控制整组 UI 的透明度。
【CanvasGroup】组件挂在 UI 容器上,统一控制其下所有子 UI 的透明度/交互。
【属性】Alpha(0-1 透明度)、Interactable(可交互)、Blocks Raycasts(阻挡点击)。
【淡入淡出原理】改 Alpha 值:0=全透明(看不见),1=不透明。
【代码淡入】
CanvasGroup cg;
IEnumerator FadeIn() {
cg.alpha = 0f;
while (cg.alpha < 1f) { cg.alpha += Time.deltaTime * 2f; yield return null; }
}
【淡出】同理把 alpha 减到 0,结束后 SetActive(false)。
【用途】菜单开关、提示气泡、死亡画面淡入。
【注意】Alpha=0 时仍占位置、可被点击,配合 Interactable/BlocksRaycasts=false 或 SetActive。
【动画方式】也可用 Animator 给 CanvasGroup.alpha 做动画(第 127 课)。
✅
淡入淡出 = CanvasGroup.alpha 平滑变化。UI 动画第一步。
◆
滑入滑出与缩放
移动与弹跳。
【滑入】让面板从屏幕外滑进来:
RectTransform rt;
Vector2 offScreen = new Vector2(rt.anchoredPosition.x, -600f); // 屏幕下方
rt.anchoredPosition = offScreen;
while (rt.anchoredPosition.y < 0f) {
rt.anchoredPosition = Vector2.MoveTowards(rt.anchoredPosition, Vector2.zero, 800f * Time.deltaTime);
yield return null;
}
【滑出】反向移动后 SetActive(false)。
【缩放弹跳】从 0 放大到 1.1 再回 1:
rt.localScale = Vector3.zero;
while (rt.localScale.x < 1f) { rt.localScale += Vector3.one * Time.deltaTime * 3f; yield return null; }
【专业做法】用 Animator 状态机做这些过渡(可复用、可预览),或 DoTween 插件(第三方,超好用)。
【DoTween 简介】安装后一行:panel.DOFade(1f, 0.5f); 极其简洁,强烈推荐进阶。
【实战】做一个“设置面板”:点按钮滑入、关闭滑出。
【注意】UI 动画注意在关闭时禁用组件避免持续占用。
【体验】动画时长 0.2-0.4 秒手感最佳,太长拖沓。
✅
UI 动画 = CanvasGroup 透明度 + anchoredPosition 移动 + localScale 缩放,三种自由度。
⚠
常见错误与排查
⛔
错误:
淡出后还能点按钮?
原因:
Alpha=0 但 BlocksRaycasts=true
解决:
淡出完成时把 BlocksRaycasts 设 false 或 SetActive(false)。
★
动手练习
课后小任务(做出来才算真的学会)
实现面板淡入淡出
实现设置面板滑入滑出
(进阶)安装 DoTween 用一行代码做动画
✓
本节小结
UI 动画已掌握。下一课做生命值血条。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
UI 自适应屏幕
下一课 →
生命值血条实现
↑