タッチのサポート
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 つの側面からタッチ情報へのアクセスを提供するように設計されています。
指: それぞれの指は、
Touchscreen
上の N 番目の接触ソースとして定義されます。Touch.activeFingers を使用すると、現在アクティブなすべての指の配列を取得できます。タッチ: 各タッチは、少なくとも開始時点 (
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
デバイスからの入力を仮想タッチスクリーンデバイスにミラーします。