加载中...

【每日进步】3分钟学会Unity游戏中进度条制作

  • 2025-02-28
  • 游戏开发
  • unity教程 游戏开发
  • --

在商业游戏中,进度条是一种常见的界面元素,用于向玩家展示加载过程、任务完成度或技能冷却等信息。它的设计不仅影响游戏的视觉效果,还直接关系到玩家的体验。虽然游戏行业没有严格的“行业标准”来规范进度条的制作,但存在一些广泛认可的最佳实践和设计原则。

加载进度条在游戏启动、场景切换或资源加载时告知玩家等待时长,比如进入新地图时的横向加载条。

Pasted Graphic 1.png

Pasted Graphic 2.png

技能进度条用于技能冷却或动作计时,助玩家把握节奏,比如MOBA 游戏的技能的冷却条。

Pasted Graphic.png

游戏进度条设计虽无统一标准,但要遵循关键原则。准确性是基础,不能用 “假进度” 误导玩家。需通过直观填充方式,搭配数字、百分比或动画,给予玩家清晰反馈。其视觉设计要与游戏整体 UI 风格契合,包括颜色、字体、主题等。利用平滑填充动画或颜色变化进行动画优化 。

进度条不只是功能元素,还能优化玩家体验。加载进度条减少等待不确定性,缓解焦虑。任务进度条临近完成时激发玩家动力。设计上,简洁风格更受青睐,复杂设计易分散玩家注意力 。

在Unity中,我们可以使用Slider组件和简单脚本在3分钟之内实现一个功能完备的进度条。

第1分钟:

1. 创建UI组件

  • 在Unity的Hierarchy新建一个Slider;
  • 略微调整大小和位置,把手柄(Handle )隐藏掉。

Pasted Graphic 5.png

  • 给Fill子对象选择一个好看的填充颜色或图像(例如红色表示进度)。

**
**

第2分钟

编写控制脚本

为了动态更新进度条,我们需要一个脚本控制Slider的value值(范围为0到1,1表示100%)。

新建一个C#脚本 ,命名为ProgressBarController。双击脚本打开编辑器,输入以下代码:

using UnityEngine;using UnityEngine.UI;public class ProgressBarController : MonoBehaviour{    private Slider progressSlider;    void Awake()    {        progressSlider = GetComponent<Slider>();    }    public void SetProgress(float progress)    {        
progressSlider.value = Mathf.Clamp01(progress);
// 确保值在0到1之间
    }}

然后,将ProgressBarController脚本拖到Slider对象上,progressSlider会自动获取Slider组件。

模拟耗时任务

为了让进度条有明显的变化,我们创建一个模拟任务脚本,模仿一个耗时的加载过程,更贴近实际场景,可以模拟加载多个资源(如图片、模型等)。

创建另一个C#脚本,命名为FakeLoader。输入以下代码:

using UnityEngine;using System.Collections;using UnityEngine.UI;public class FakeLoader : MonoBehaviour{    public ProgressBarController progressBar;    public Sprite[] fakeResources; // 模拟加载的资源数组    
public float loadTimePerResource = 0.5f;
// 每个资源加载时间
    void Start()    {        StartCoroutine(LoadResources());    }    IEnumerator LoadResources()    {        int totalResources = fakeResources.Length;        int loadedResources = 0;        foreach (Sprite resource in fakeResources)        {            // 模拟加载每个资源            
yield return new WaitForSeconds(loadTimePerResource);
            loadedResources++;            
float progress = (float)loadedResources / totalResources;
            progressBar.SetProgress(progress);            
Debug.Log($"加载资源 {
loadedResources}
/{
totalResources}
");
        }        Debug.Log("所有资源加载完成!");    }}

设置场景

创建一个空的GameObject,命名为Loader,并挂载FakeLoader脚本。然后将场景中的Slider对象拖到FakeLoader脚本的progressBar字段中。在Project面板中创建几个Sprite(模拟要加载的资源)。然后把这些Sprite拖到FakeLoader的fakeResources字段中。设置loadTimePerResource为0.5(每资源加载0.5秒)。 Pasted Graphic 7.png

  • 运行效果
  • 每次“加载”一个资源,进度条会推进一小段,模拟真实加载过程。

第3分钟

优化一下,添加平滑过渡

如果希望进度条变化更平滑,可以修改ProgressBarController,加入插值效果。更新ProgressBarController的代码:

public void SetProgress(float targetProgress){    StartCoroutine(SmoothProgress(targetProgress));}private IEnumerator SmoothProgress(float target){    float speed = 3f; // 平滑速度    
while (Mathf.Abs(progressSlider.value - target) > 0.001f)
    {        
progressSlider.value = Mathf.MoveTowards(progressSlider.value, target, Time.deltaTime * speed);
        yield return null;    }    progressSlider.value = target;}
  • 效果
  • 进度条将从当前值平滑过渡到目标值,提升视觉体验。

录屏2025-02-27 18.12.32.gif

非常好,通过以上步骤,你在3分钟内用Unity实现了一个完整的进度条功能,这个方法简单易用,适用于大多数进度条需求。

Maple
Maple
© 2025 by Maplezz 本文基于 CC BY-NC-SA 4.0 许可 CC 协议 必须注明创作者 仅允许将作品用于非商业用途 改编作品必须遵循相同条款进行共享 最后更新:2025/8/20