MRが楽しい

MRやVRについて学習したことを書き残す

Unityでスクリーンへのタッチ状態を取得する

本日は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 システムがタッチの追跡をキャンセルしました

docs.unity3d.com