【Unity】【UI Toolkit】押している間イベントが呼ばれ続けるボタンRepeatButtonの使い方

UnityのUI Toolkitの押している間イベントが呼ばれ続けるRepeatButtonの使い方についてまとめました。

Unity 2022.2.17

RepeatButtonとは?

UI ToolkitにはRepeatButtonというVisualElementが用意されています。
これを使うと、押している間に一定の時間を空けてクリックイベントが発行され続けるようなボタンを実装できます。

本記事ではこれの使い方についてまとめます。

実装

実装方法は以下の通りです。

リピート開始までの遅延時間と、リピート間隔を指定することができます。
ボタンを押下するとまず一回クリックイベントが発行され、その後は指定された遅延時間後にもう一度クリックイベントが発行され、その後はリピート間隔ごとにイベントが発行されつづけます。

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

public sealed class Example : EditorWindow
{
    private void CreateGUI()
    {
        // リピート開始までの遅延時間
        var delay = 1000;
        // リピート間隔
        var interval = 1000;
        var repeatButton = new RepeatButton(() =>
        {
            // クリック時に一回、リピート開始時に一回と、その後はリピート間隔毎に呼ばれる
            Debug.Log("Clicked");
        }, delay, interval);
        
        repeatButton.text = "RepeatButton";
        repeatButton.style.borderBottomColor = Color.gray;
        repeatButton.style.borderTopColor = Color.gray;
        repeatButton.style.borderLeftColor = Color.gray;
        repeatButton.style.borderRightColor = Color.gray;
        repeatButton.style.borderBottomWidth = 1;
        repeatButton.style.borderTopWidth = 1;
        repeatButton.style.borderLeftWidth = 1;
        repeatButton.style.borderRightWidth = 1;
        repeatButton.style.unityTextAlign = TextAnchor.MiddleCenter;
        rootVisualElement.Add(repeatButton);
        
    }

    [MenuItem("Window/Example")]
    private static void Open()
    {
        GetWindow<Example>();
    }
}

結果

Window > Exampleからウィンドウを開いてボタンを押し続けると以下のような挙動となります。

結果

正常に動作していることを確認できました。

参考

docs.unity3d.com

Unity - Scripting API: RepeatButton