作用展现与功用描绘

先看作用:

unity | 手把手教你实现按钮 loading 状态

功用描绘:当处于加载状况时,按钮上呈现旋转的 loading 图标,且按钮不可点击;结束加载状况后,loading 图标消失,且按钮可点击。

实现方案与代码示例

  1. 创立 loadingIcon 目标

unity | 手把手教你实现按钮 loading 状态

工具栏 -> GameObject -> UI -> Image,创立一个具有 Image 组件的游戏目标。

unity | 手把手教你实现按钮 loading 状态

调整 Rect Transform 组件中的 width、height 来调整图标的大小。在 Image 组件中,修正 Source Image 为 loading 图标。

*目标层级怎么放都行,也能够将 loadingIcon 作为 Button 的子目标。脚本绑定时只需要重视「将具有 Button 组件的目标拖到 button 变量,将 loadingIcon 目标拖到 loadingIcon 变量」这个对应联系即可(后面打开介绍)。

  1. 创立脚本

顶部工具栏 Assets -> Create -> C# Script,命名为 ButtonController.cs

  1. 编写脚本

思路:

  • 支撑两个办法,一个是 loading,启用按钮 loading 状况;另一个是 StopLoading,封闭按钮 loading 状况。
  • Loading 办法中,将按钮的可交互状况设为 true,将 loading 图画设置为激活状况,一起设置 loading 状况变量为 true,用于在组件 Update 钩子中执行旋转逻辑。
  • StopLoading 办法同上,状况相反,这儿不打开介绍。
  • Update 生命周期中,对 loadingIcon 进行旋转

示例代码:

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ButtonController : MonoBehaviour
{
    public GameObject button, loadingIcon;
    bool loading = false;
    // Start is called before the first frame update
    void Start()
    {
    }
    // Update is called once per frame
    void Update()
    {
        if(loading) {
            loadingIcon.transform.Rotate(0.0f, 0.0f, 1.0f, Space.World);
        }
    }
    public void Loading() {
        button.GetComponent<Button>().interactable = false;
        loadingIcon.SetActive(true);
        loading = true;
    }
    public void StopLoading() {
        button.GetComponent<Button>().interactable = true;
        loadingIcon.SetActive(false);
        loading = false;
    }
}
  1. 将脚本拖拽到目标上,再把 button 目标和 loadingIcon 目标拖入变量区域即可

将脚本拖拽到目标上:(脚本放在哪个目标上都能够,跟上边着重的相同,只需要重视脚本中绑定的目标正确即可)

unity | 手把手教你实现按钮 loading 状态

把 button 目标和 loadingIcon 目标拖入变量区域:

unity | 手把手教你实现按钮 loading 状态

unity | 手把手教你实现按钮 loading 状态