Unityでスマホのタッチ認識をしてみる(2)

前回はざっとTouchを取得してみる、ということをやってみましたが、今回はもう少しTouchを深堀りしてみたいと思います。
前回、foreachループで、touches配列に入っているTouchを1つづつ取り出して中身を見る、というコードを書きましたが、リファレンスのサンプルコードを見ると、GetTouch()というメソッドを使ってTouchを取得するパターンがよく出てきます。
GetTouchの引数は、0から始まるintとなり、とりあえず0番目から順に見ていけばいい、ということになります。
ここで疑問になるのが、毎回Update()のたびにTouchを0番目から見ていたたら、どうやってあるTouch(⇒指)が前回に比べて動いたとか離されたとかの状態遷移がわかるの?ということになります。
それを解決するために、TouchにはfingerIdというプロパティがあり、このfingerIdは、タッチを開始して動かして指を離す、というタッチの1つライフサイクル上で一意のIDが割り振られています。
前回のコードをちょっと修正して、タッチを開始した時に、そのfingerIdを表示するようにします。

void Update()
{
			if(Input.touchCount > 0)
			{
				foreach(Touch t in Input.touches)
				{
					if (t.phase == TouchPhase.Began)
					{
						Debug.Log("fid=" + t.fingerId + " x=" + t.position.x + " y=" +  t.position.y);
					}
				}
			}
}

この状態で動かすと、最初にタッチしたらID=0で、それを離してまたタッチしてもID=0になりますが、1本の指をタッチしたまま、2本目の指をタッチすると、ID=1として認識されます。こうやって最初に触った指なのか、その後の指なのかを判別できるわけですね。
とまあ、マルチタッチ時の判別ができるのですが、今回はなるべく簡単に、ということで、しばらくは最初のタッチだけに的を絞っていろいろ操作していきたいと思います。(Input.touches[0]とGetTouch(0)は、パフォーマンス面で違いがあるらしいのですが、まだよく理解できていません・・)

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク