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操作をする上でとても重要です。今回利用したイベントは押し下げ・押し上げですが、他にもたくさんのイベントが存在します。
イベント系インターフェースに関してはこちらで解説していますので、よければご確認ください
UIを操作するためのイベントインターフェース[Unity+UI]
UIとプログラムを連携させる時、イベント系のインターフェースを知っているととても簡単に実装できることがあります。ここではどのようなインターフェースがあるかと、…
Imageについて
ゲージになる部分のImageは設定を変えています。注目ポイントとしては「Image Type:Filled」です。
FilledにするとFill Amountを0~1の間の数値で変更することで画像の表示量を調整することができます。これを利用してゲージ扱いをしています。
FillMethod | 様相 |
---|---|
Horizontal | 横方向 |
Vertical | 縦方向 |
Radial 90 | 90度 |
Radial 180 | 180度 |
Radial 360 | 360度 |
- Fill Origin:始点の指定
- Clock wize:方向の指定
コメント