(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


uGUIの要素のドラッグ開始、最中、終了を検知する方法【Unity】【uGUI】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2020.3.25f1



はじめに

今回はuGUIの要素のドラッグ開始、最中、終了を検知する方法の紹介です!


また、記事中では以下のアセットを使っています。

Clean & Minimalist GUI Pack | 2D GUI | Unity Asset Store



uGUIの要素のドラッグ開始、最中、終了を検知する方法

ドラッグを検知するにはEventSystemが配置されている状態で

(uGUIの要素作った時に自動で作成されるやつ)


IBeginDragHandler、IDragHandler、IEndDragHandlerというインタフェースを追加し、

そのメソッドであるOnBeginDrag(ドラッグ開始)、OnDrag(ドラッグの最中)、

OnEndDrag(ドラッグ終了)を実装したスクリプトを

using UnityEngine;
using UnityEngine.EventSystems;//IBeginDragHandler, IDragHandler, IEndDragHandlerを使うのに必要

public class DragSample : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
 
  //=================================================================================
  //更新
  //=================================================================================

  public void OnBeginDrag(PointerEventData eventData) {
    Debug.Log($"ドラッグ開始");
  }

  public void OnDrag(PointerEventData eventData) {
    Debug.Log($"ドラッグ中");
  }

  public void OnEndDrag(PointerEventData eventData) {
    Debug.Log($"ドラッグ終了");
  }
  
}


uGUIの要素(今回はImage)に追加するだけです。


これだけでドラックの開始、最中、終了を検知する事が出来ます。

ただし、開始はその要素上でしか検知しませんが

最中と終了は要素の外でも検知してしまう点には注意が必要です。


なお引数のeventDataから

現在のポインタの位置(position)最後の更新からの移動量(delta)などを取得する事も可能です。