長押しボタンを作る![Unity+UI]

UIのイベント系インターフェースを利用して、長押しボタンを作って見ましょう

目次

長押しボタンを作る

長押し用のコンポーネントはないので、スクリプトを使って自身で拡張するのが手っ取り早いです。

作れるもの

ボタンを長押しするとゲージがぐるっとまわり、長押し判定を取れるようになります。下図ではLong Tap!!と出てますが、これは編集で、実際にはDebug.Logに表示がされています。ゲームではそのタイミングで次のアクションを作ることで長押しが実装できます。

フェアリー

ゲージが不要な人はカットしてね

スクリプト

Updateメソッド内、「Long Tap」のログが出るタイミングが長押し判定になります。

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class LongTap : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    private float time = 0;
    private bool isDown = false;
    private float longTapTime = 1.0f;

    [SerializeField] private Image circleImage;

    public void OnPointerDown(PointerEventData eventData)
    {
        isDown = true;
        time = 0f;
        circleImage.fillAmount = 0f;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        isDown = false;
        circleImage.fillAmount = 0f;
    }

    void Update()
    {
        if (isDown)
        {
            time += Time.deltaTime;
            if (time >= longTapTime)
            {
                Debug.Log("Long Tap");
                isDown = false;
            }
            circleImage.fillAmount = time / longTapTime;
        }
    }
}

Unityのセットアップ

あとはUnity上にボタンになるImageやゲージ用のImageをセットします。

  • ボタンになるImage(名前:button)を追加
  • ゲージになるImage(名前:circle)を追加
    • Source Imageに丸い画像をセットしてください
  • circle.Imageコンポーネントを変更
    • Image Type:Filled
    • Fill Method:Radial 360
    • Fill Origin:Top
    • Fill Amount:0
    • Clock wise:disable(チェックはずす)
  • buttonにLongTapスクリプトをアタッチ
    • Circle Image:circle

補足説明など

長押しボタンを作る上ですっ飛ばしてる内容を追加でご説明

インターフェースについて

イベント系のインターフェースはUnityのUI操作をする上でとても重要です。今回利用したイベントは押し下げ・押し上げですが、他にもたくさんのイベントが存在します。

イベント系インターフェースに関してはこちらで解説していますので、よければご確認ください

Imageについて

ゲージになる部分のImageは設定を変えています。注目ポイントとしては「Image Type:Filled」です。

FilledにするとFill Amountを0~1の間の数値で変更することで画像の表示量を調整することができます。これを利用してゲージ扱いをしています。

FillMethod様相
Horizontal横方向
Vertical縦方向
Radial 9090度
Radial 180180度
Radial 360360度
  • Fill Origin:始点の指定
  • Clock wize:方向の指定
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次