2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity の uGUI のみで複数のタッチ入力を無視する方法

Last updated at Posted at 2019-05-04

(検証環境: Unity 2019.1.0f2/Android 9)

tl;dr

概要

Input.multiTouchEnabledfalse にすれば Unity 全体で無効にできるのですが uGUI でだけその機能を使いたくないときに非常に不便なので uGUI でのみ無効にする方法を考えてみました。

やりかた

  1. 複数のタッチ入力を無効にしたいコンポーネントを派生したクラスを作る。例えば public class MyButton : UnitySystem.UI.Button のようにする。
  2. 1 で作ったクラスから UnityEngine.EventSystems.PointerEventData を受け取るメソッドを override して eventData.pointerId が 0 以外であればその場で return させる。 0 であれば親の処理を呼び出す。例えば base.OnPointerDown(eventData); のように。
  3. Button の代わりに 2 で作ったスクリプトを使う。すでに Button を貼り付けている場合は インスペクタを Normal から Debug に切り替えることにより Script を直接差し替えることができるので、それで変更すると、すでに設定してあるプロパティを消すことなく移行できる。

実装例

他に考えたこと

おそらく EventSystem そのものに手を加えていけば uGUI のコンポーネントを改造することなくシングルタッチ環境を構成できると思うのですが、そこまで書き換えることが現実的でないと思ったので、コンポーネントに手を加える戦略を採用しました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?