はじめに
Unity開発で画面タッチ情報はInput.GetTouch(index)
などで簡単に取得できます。
マルチタッチの場合も全てのタッチ情報が取得できますが、特定タッチの移動などを追う際はタッチ情報のindexではなくfingerId
を参照する必要があります。公式ドキュメントでも書かれています。
これがつまりどういうことなのか…実際に目で見てわかる形で動作を確認した記録です。
対象
- Unityでマルチタッチ情報を取り扱おうとしているひと
- Unityのマルチタッチ情報がどんな状態で格納されているか気になるひと
動作確認
動的にメッシュを描画するなどの習作を兼ねて、マルチタッチ(4点まで)の各タッチ情報が見てわかるようなアプリを作成しました。(Android用)
githubに置いてあります:https://github.com/zeffy1014/Unity_TouchExperience
アプリ制作・動作確認環境
- Unity: 2019.3.0f6 64bit
- Android端末: URBANO V02, Android 5.1
動作確認結果
①→②→③の順番で画面タッチした後、①の指を離した場合にどうなるか確認しました。
残った②③についてはfingerId
は変わりませんが、タッチ情報の配列のindexとしては前に詰まりました。
このことから、例えば②のタッチ情報を追跡する場合は
×:Input.GetTouch(1)
ではなく
○:一通りタッチ情報を取得した上で fingerId==1
となるタッチ情報を参照する
という必要がある。ということになります。
なお、この後再度どこか追加タッチした場合は、その地点がindex=0
,fingerId=0
で格納されました。
なんとなく考察
実際の動作を確認した上で、マルチタッチの情報がどのように格納されるのか?について考えますと…
推測の域を出ませんが、新規タッチを検出するたびに
-
fingerId
について0から順に空いているものが割り当たる - タッチ情報の配列は新規タッチ、既存タッチ問わず
fingerId
の若いものから順番に入る
という感じになるのかなと思われました。
このあたりは正直開発者はあまり気にしなくてよい部分だとは思いますが、複雑なタッチ操作を行うアプリを実装する機会があった際にちょっと知っておけるとよいかと思います。
とはいえ、とりあえずは「同一タッチを追うならfingerId
を参照」だけ注意すればよさそうですかね。
以上です。