ぷらこあ

ゆるふわゲームクリエイター / イベントオーガナイザーを目指してます

【Unity/uGUI】ボタンを長押しした際の挙動を実装する

  • uGUIのボタンを一定時間押した際に何かしらの挙動を起こしたかった
  • 取り急ぎ以下のパターンの実装にて実装が可能そう
    • (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

挙動

f:id:lycoris102:20160725231029g:plain

メモ

  • OnPointer(Down|Up)UI .Selectable に生えている関数
    • SelectableEventSystem からの入力を受け取りイベントを発火する
    • Buttonで定義されたイベントを base.XXX で呼び出しつつ、独自の内容を定義
  • UnityEvent を使うことで独自のコールバック機構が実装可能
    • UnityEvent.AddListener でコールバックメソッドを追加
    • UnityEvent.Invoke が実行されるタイミングでコールバックメソッドが実行される

余談

  • Inspector上でイベント登録出来る様にするにはEditor拡張が必要
    • 本家を参考にすると良さそう
  • TouchScriptInput.Touches等のアセット使うと車輪の再発明しなくて良さそう
  • UniRxのCreating custom triggersのサンプルが長押しなので使える場合は使うと良さそう

github.com

参考

westhillapps.blog.jp albacrow597.blog.fc2.com teratail.com