以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/09/09/234923より取得しました。


Unityでスクリーンへのタッチ状態を取得する その2(マルチタップを検出する)

本日は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);
    }
}

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




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/09/09/234923より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14