【Unity/uGUI】ボタンを長押しした際の挙動を実装する
- uGUIのボタンを一定時間押した際に何かしらの挙動を起こしたかった
- UI.Button コンポーネントは onClick (単一クリック) のみ有効
- 取り急ぎ以下のパターンの実装にて実装が可能そう
- (1) 本家 UI.Buttonのコードを拝借しつつ拡張する
- (2) 本家 UI.Buttonを継承しつつ、必要な拡張要素を記述する
- (3) 本家 UI.Buttonとは別のUnityEventの定義を記述する
- 長押しのために複数スクリプトを都度アタッチするのはまどろっこしかったので(3)はパス
RequireComponent(typeof(Button))
すればいいじゃんと言われそう
- (1)は本家のコードを持って来てoverrideする感じになる(?)
- Unityのバージョンが変更されてUI周りに変更が生じた時に追従できなくなるのでパス
- 今回は(2)のケースでの記述を試みる
コード
gist.github.com gist.github.com
挙動
メモ
OnPointer(Down|Up)
はUI .Selectable
に生えている関数Selectable
はEventSystem
からの入力を受け取りイベントを発火する- Buttonで定義されたイベントを
base.XXX
で呼び出しつつ、独自の内容を定義
- UnityEvent を使うことで独自のコールバック機構が実装可能
UnityEvent.AddListener
でコールバックメソッドを追加UnityEvent.Invoke
が実行されるタイミングでコールバックメソッドが実行される
余談
- Inspector上でイベント登録出来る様にするにはEditor拡張が必要
- 本家を参考にすると良さそう
- TouchScriptやInput.Touches等のアセット使うと車輪の再発明しなくて良さそう
- UniRxのCreating custom triggersのサンプルが長押しなので使える場合は使うと良さそう