本日はUnityの小ネタ枠です。
Unityでスクリーンへのタッチ状態を取得する方法です。
Touch
Touch構造体はスクリーンに指がタッチされた状態を保持する構造体です。
Input.GetTouchメソッドを呼び出して毎フレーム最新の状態を取得することができます。
docs.unity3d.com
docs.unity3d.com
void Update() { string message = String.Empty;; // ひとつ以上のタッチがある場合 if (Input.touchCount > 0) { // 一つ目のタッチを取得 Touch touch = Input.GetTouch(0); // タッチ情報をもとに処理を行う // ... } }
エディター上でも以下のDevice-Simlulatorとマウス操作を使ってタッチ情報の動作を確認することができます。
bluebirdofoz.hatenablog.com
サンプルスクリプト
Touch構造体からタッチの状態と座標を取得する以下のサンプルスクリプトを作成しました。
・GetTouchTest.cs
using System; using TMPro; using UnityEngine; public class GetTouchTest : MonoBehaviour { [SerializeField] private TMP_Text text; void Update() { string message = String.Empty;; // ひとつ以上のタッチがある場合 if (Input.touchCount > 0) { // 一つ目のタッチを取得 Touch touch = Input.GetTouch(0); switch (touch.phase) { case TouchPhase.Began: // タッチした座標を表示 message += "Touch Start. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Moved: // タッチしている座標を表示 message += "Touch Moved. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Stationary: // タッチしている座標を表示 message += "Touch Stationary. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Ended: // タッチを離した座標を表示 message += "Touch Ended. Position : " + touch.position + System.Environment.NewLine; break; case TouchPhase.Canceled: // タッチをキャンセルした座標を表示 message += "Touch Canceled. Position : " + touch.position + System.Environment.NewLine; break; default: throw new ArgumentOutOfRangeException(); } text.text = message; Debug.Log(message); } } }
タッチ状態は以下の5種類の状態が取得できます。
識別名 | 説明 |
---|---|
Began | 画面に指が触れたとき |
Moved | 画面上で指が動いたとき |
Stationary | 指が画面に触れているが動いてはいないとき |
Ended | 画面から指が離れたとき |
Canceled | システムがタッチの追跡をキャンセルしました |