docs.unity3d.com
    目次を表示する/隠す

    タッチのサポート

    • Touchscreen Device
    • Action での Touch の使用
    • Touch クラス
    • Touch シミュレーション

    Touch のサポートは、以下のように分かれています。

    • Touchscreen クラスに実装されている低レベルサポート。
    • EnhancedTouch.Touch クラスに実装されている高レベルサポート。

    ノート: Touchscreen はポーリングに使用しないでください。UnityEngine.Input.touches のようにタッチを読み出すには、EnhancedTouch を参照してください。Update または FixedUpdate メソッド内で Touchscreen から直接タッチ状態を読み出しても、アプリケーションではタッチ状態の変更が検出されません。

    タッチ入力は、Android、iOS、Windows、ユニバーサル Windows プラットフォーム (UWP) でサポートされます。

    ノート: モバイルデバイスからのタッチ入力を使用して、iOS または Android のアプリをエディターでテストするには、こちら で説明されている Unity Remote を使用できます。

    Touchscreen Device

    最も低いレベルでは、タッチスクリーンが InputSystem.Touchscreen Device によって表されます。この Device は、タッチスクリーンの Raw の状態をキャプチャします。タッチスクリーンは Pointer レイアウトに基づいています。

    最後に使用されたタッチスクリーン、または最後に加えられたタッチスクリーンを照会するには、Touchscreen.current を使用します。

    Control

    タッチスクリーン Device には、Pointer から継承される Control に加えて、以下の Control が実装されています。

    Control 型 説明
    primaryTouch TouchControl 画面のプライマリタッチを表すタッチ Control。Device の Pointer 表現は、プライマリタッチによって駆動されます。
    touches ReadOnlyArray<TouchControl> Device 上のすべてのタッチを表す、タッチ Control の配列。

    タッチスクリーン Device は、複数の TouchControl で構成されます。これらの各 Control は、Device をタッチする可能性のある指を表します。primaryTouch Control は、Pointer 表現を現在、駆動しているタッチを表します。このタッチは、UI との対話に使用します。これは通常、最初に画面にタッチした指です。

    primaryTouch は必ず、touches 配列のいずれかのエントリーと同じになります。touches 配列には、システムで追跡できるすべてのタッチが含まれています。現在アクティブなタッチの数にかかわらず、この配列のサイズは固定です。アクティブなタッチのみを表す API が必要な場合は、高レベルの EnhancedTouch.Touch クラス を参照してください。

    primaryTouch を含む Device 上の各 TouchControl は、以下の子 Control で構成されます。

    Control 型 説明
    position Vector2Control タッチサーフェス上の絶対位置。
    delta Vector2Control 前回のフレームからの position の差。
    startPosition Vector2Control サーフェスに指が最初にタッチした位置を表す position。
    startTime DoubleControl サーフェスに指が最初にタッチした時刻。
    press ButtonControl 指で押されているかどうか。
    pressure AxisControl ポインターサーフェスに接触している指で現在、押されている圧力の正規化された値。
    radius Vector2Control 指がサーフェスに接触している領域のサイズ。
    touchId IntegerControl タッチの ID。これによって個々のタッチを識別できます。
    phase TouchPhaseControl 現在のタッチの TouchPhase を報告する Control。
    tap ButtonControl このタッチから OS がタップジェスチャを認識したかどうかを報告するボタン Control。
    tapCount IntegerControl OS から報告された、連続する tap の数。これを使用して、ダブルタップジェスチャやマルチタップジェスチャを検出できます。

    Action へのタッチの使用

    タッチ入力は、他のあらゆる Pointer Device と同様に Action で使用することができます。そのためには、<Pointer>/press や <Pointer>/delta などの ポインター Control に バインド します。これにより、主要タッチからの入力と、他の任意の非タッチポインター Device からの入力が取得されます。

    ただし、Action で複数のタッチから入力を取得する必要がある場合は、<Touchscreen>/touch3/press などの Binding を使用して個々のタッチにバインドできます。または、ワイルドカード Binding を使用して、1 つの Action をすべてのタッチにバインドする方法もあります。例えば、<Touchscreen>/touch*/press を使用できます。

    1 つの Action を複数のタッチからの入力にバインドする場合は、1 回だけでなく、タッチごとに Action にコールバックが通知されるように、Action タイプを Pass-Through に設定する必要があります。

    EnhancedTouch.Touch クラス

    EnhancedTouch.Touch クラスは、タッチ用に UnityEngine.Input.touches と同様のポーリング API を提供します。これを使用すると、フレームごとにタッチを照会できます。

    この API は、発生したタッチを記録する必要があるために一定のオーバーヘッドを伴います。したがって、明示的に有効にする必要があります。そのためには、EnhancedTouchSupport.Enable() を呼び出します。

        using UnityEngine.InputSystem.EnhancedTouch;
            // ...
            // 例えば、MonoBehaviour.Awake() から呼び出すことができます。また、他の任意の
            // RuntimeInitializeOnLoadMethod コードから呼び出すこともできます。
            EnhancedTouchSupport.Enable();
    

    ノート: Touchscreen では、EnhancedTouchSupport の有効化は必須ではありません。EnhancedTouchSupport.Enable() を呼び出す必要があるのは、EnhancedTouch.Touch API を使用する場合だけです。

    EnhancedTouch.Touch API は、以下の 2 つの側面からタッチ情報へのアクセスを提供するように設計されています。

    1. 指: それぞれの指は、Touchscreen 上の N 番目の接触ソースとして定義されます。Touch.activeFingers を使用すると、現在アクティブなすべての指の配列を取得できます。

    2. タッチ: 各タッチは、少なくとも開始時点 (PointerPhase.Began) と終了時点 (PointerPhase.Ended または PointerPhase.Cancelled) のある、1 本の指の接触を表します。これらの 2 つの時点の間に、任意の数の PointerPhase.Moved レコードや PointerPhase.Stationary レコードが存在します。1 つのタッチ内のすべてのレコードには、同じ touchId が含まれます。Touch.activeTouches を使用すると、現在アクティブなすべてのタッチの配列を取得できます。これにより、特定のタッチが画面上をどのように移動するかを追跡することができ、特定のジェスチャの認識処理を実装する場合に役立ちます。

    詳細については、EnhancedTouch.Touch API ドキュメント を参照してください。

    ノート: Touch および Finger API では GC ガベージが生成されません。データの大部分は、ラッパー構造体によってインデックス付けされたアンマネージメモリに格納されます。すべての配列は事前に割り当てられます。

    Touch シミュレーション

    Touch 入力は、Mouse デバイスや Pen デバイスなど、他の種類の ポインター デバイスからシミュレーションを行うことができます。これを有効にするには、シーン内の GameObject に TouchSimulation MonoBehaviour を加えるか、起動コードのどこかで TouchSimulation.Enable を呼び出します。

        void OnEnable()
            {
                TouchSimulation.Enable();
            }
    

    エディターでは、Input Debugger の "Options" ドロップダウンで "Simulate Touch Input From Mouse or Pen" をトグルしてタッチシミュレーションを有効にすることもできます。

    TouchSimulation は、Touchscreen デバイスを加えて、任意の Pointer デバイスからの入力を仮想タッチスクリーンデバイスにミラーします。

    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)