3
1

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]マルチタッチ情報はindexではなくfingerIdで追う必要がある

Last updated at Posted at 2020-04-14

はじめに

Unity開発で画面タッチ情報はInput.GetTouch(index)などで簡単に取得できます。
マルチタッチの場合も全てのタッチ情報が取得できますが、特定タッチの移動などを追う際はタッチ情報のindexではなくfingerIdを参照する必要があります。公式ドキュメントでも書かれています。

これがつまりどういうことなのか…実際に目で見てわかる形で動作を確認した記録です。

対象

  • Unityでマルチタッチ情報を取り扱おうとしているひと
  • Unityのマルチタッチ情報がどんな状態で格納されているか気になるひと

動作確認

動的にメッシュを描画するなどの習作を兼ねて、マルチタッチ(4点まで)の各タッチ情報が見てわかるようなアプリを作成しました。(Android用)
1.jpg
githubに置いてあります:https://github.com/zeffy1014/Unity_TouchExperience

アプリ制作・動作確認環境

  • Unity: 2019.3.0f6 64bit
  • Android端末: URBANO V02, Android 5.1

動作確認結果

①→②→③の順番で画面タッチした後、①の指を離した場合にどうなるか確認しました。
2.jpg
残った②③についてはfingerIdは変わりませんが、タッチ情報の配列のindexとしては前に詰まりました。
このことから、例えば②のタッチ情報を追跡する場合は
 ×:Input.GetTouch(1)ではなく
 ○:一通りタッチ情報を取得した上で fingerId==1となるタッチ情報を参照する
という必要がある。ということになります。

なお、この後再度どこか追加タッチした場合は、その地点がindex=0,fingerId=0で格納されました。

なんとなく考察

実際の動作を確認した上で、マルチタッチの情報がどのように格納されるのか?について考えますと…
推測の域を出ませんが、新規タッチを検出するたびに

  • fingerIdについて0から順に空いているものが割り当たる
  • タッチ情報の配列は新規タッチ、既存タッチ問わずfingerIdの若いものから順番に入る

という感じになるのかなと思われました。

このあたりは正直開発者はあまり気にしなくてよい部分だとは思いますが、複雑なタッチ操作を行うアプリを実装する機会があった際にちょっと知っておけるとよいかと思います。
とはいえ、とりあえずは「同一タッチを追うならfingerIdを参照」だけ注意すればよさそうですかね。

以上です。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?