本日はUnityの小ネタ枠です。
Unityでスクリーンへのタッチ状態を取得する方法です。
Input.touchCount
同時にスクリーンに指がタッチされた数を返します。
フレーム毎でのタッチ数が返ります。
docs.unity3d.com
Touch構造体はスクリーンに指がタッチされた状態を保持する構造体です。
Input.GetTouchメソッドを呼び出して毎フレーム最新の状態を取得することができます。
docs.unity3d.com
docs.unity3d.com
以下の通りInput.touchCountの数分、GetTouchメソッドでTouch構造体を取得できます。
void Update() { // タッチ数の分だけ情報を取得する for (int i = 0; i < Input.touchCount; ++i) { // i個目のタッチ情報を取得 Touch touch = Input.GetTouch(i); // タッチ情報をもとに処理を行う // ... } } || * サンプルスクリプト Input.touchCountの数に応じてメッセージと取得するTouch構造体の数を切り替える以下のサンプルスクリプトを作成しました。 ・MultiTouchTest.cs >|cs| using System; using TMPro; using UnityEngine; public class MultiTouchTest : MonoBehaviour { [SerializeField] private TMP_Text text; void Update() { int touchCount = Input.touchCount; // タッチ数によってメッセージを変える string message = touchCount switch { 0 => "No touch" + System.Environment.NewLine, 1 => "Single touch" + System.Environment.NewLine, _ => "Multi touch" + System.Environment.NewLine }; // タッチ数の分だけ情報を取得する for (int i = 0; i < Input.touchCount; ++i) { // i個目のタッチを取得 Touch touch = Input.GetTouch(i); switch (touch.phase) { case TouchPhase.Began: // タッチした座標を表示 message += "Touch (" + i + ") Start. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Moved: // タッチしている座標を表示 message += "Touch (" + i + ") Moved. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Stationary: // タッチしている座標を表示 message += "Touch (" + i + ") Stationary. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Ended: // タッチを離した座標を表示 message += "Touch (" + i + ") Ended. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Canceled: // タッチをキャンセルした座標を表示 message += "Touch (" + i + ") Canceled. Position : " + touch.position + System.Environment.NewLine; break; default: throw new ArgumentOutOfRangeException(); } } text.text = message; Debug.Log(message); } }

以下の通りタッチ数を検出して処理を切り替えることができます。

