Locomotion
XR Interaction Toolkit パッケージは、Locomotion (ロコモーション) のプリミティブなセットを提供し、XR の体験中にシーン内を動き回る手段を提供します。それらのコンポーネントには、以下が含まれます。
- ユーザーを表す XR Origin
- XR Origin へのアクセスを制御する Locomotion System
- Teleportation Provider と Teleportation のインタラクタブル
- 一定の角度でユーザーを回転させる Snap Turn Provider
- 経時的に滑らかにユーザーを回転させる Continuous Turn Provider
- 経時的に滑らかにユーザーを移動させる Continuous Move Provider
このドキュメントでは、これらのコンポーネントの使用と拡張の方法について説明します。
用語集
用語 | 意味 |
---|---|
XR Origin | カメラリグの全般的な概念を実装するコンポーネント。Tracking Origin Mode のオプションで、XR デバイスから報告される位置の参照フレームを設定することもできます。Origin、Camera Floor Offset Object、Camera Object を指定するプロパティがあります。 |
Origin | デフォルトで、Origin は XR Origin コンポーネントがアタッチされているゲームオブジェクトであり、この名称は通例、XR Origin と意味の区別なく使用されます。またこれは、アプリケーションが Locomotion を介して操作するゲームオブジェクトです。 |
Camera Floor Offset Object | Tracking Origin Mode に応じて、フロアを基準とした目的の高さまでカメラを移動させるゲームオブジェクト。 |
Camera Object | Camera コンポーネントを含むゲームオブジェクト。通常はユーザーが見ているものをレンダリングする Main Camera です。XR リグの先頭部です。 |
Floor モード | フロアを基準とした Tracking Origin Mode です。入力デバイスはユーザーのフロア上の位置を基準として追跡されます。 |
Device モード | デバイスを基準とした Tracking Origin Mode です。入力デバイスは最初の既知の位置を基準として追跡されます。Camera Floor Offset Object を動かすことにより、カメラは Camera Y Offset 値で設定された高さに移動します。 |
Locomotion System | Locomotion Provider がユーザーを移動させることができるかどうかを制御するコンポーネント。 |
Locomotion Provider | テレポーテーションや回転といった各種 Locomotion の実装に使用する基本クラス。 |
Teleportation | ある位置から別の位置へとユーザーをテレポートさせるロコモーションの一種。 |
Snap Turn (スナップターン) | 一定の角度でユーザーを回転させるロコモーションの一種。 |
Continuous Turn (継続ターン) | 経時的に一定の量ずつ滑らかにユーザーを回転させるロコモーションの一種。 |
Continuous Move (継続移動) | 経時的に一定の量ずつ滑らかにユーザーを移動させるロコモーションの一種。 |
Action-based | Input System の Action とコントローラーのバインディングの参照に基づく、推奨される入力タイプ。 |
Device-based | [InputDevice ](InputDevice.TryGetFeatureValue からの入力の読み取りに基づく、もう 1 つの入力タイプ。 |
スナップターンとテレポーテーションを実行するための基本的なシーンの設定
以下の手順を実行する前に、Action-based の動作を効率的に設定するために、Starter Assets サンプルをインストールして、Preset Manager デフォルト値の設定 の手順に従い、Action-based の動作を使用する際のアクションの設定にかかる負荷を軽減してください。Action-based の動作を使用することをお勧めします。詳細については、Action-based の動作と Device-based の動作の違い を参照してください。
1. XR Origin と Input Action を設定する
XR Origin を設定するには、GameObject > XR > XR Origin (Action-based) を順にクリックします。これにより、シーンに XR Origin ゲームオブジェクトが作成されます。デバイスのデフォルト値を使用する代わりに、Tracking Origin Mode に Device または Floor を設定することができます。また、シーンに XR Interaction Manager がない場合は、ゲームオブジェクト上に自動的に作成されます。さらに、Origin は LeftHand Controller と RightHand Controller という 2 つの子ゲームオブジェクトを持ち、それぞれに含まれる XR Controller コンポーネントで 2 つのモーションコントローラーを表現します。
Action-based のコントローラーの場合は、割り当てるアクションは XR Controller (LeftHand) または XR Controller (RightHand) バインディングパスを使用しなければなりません。Device-based のコントローラーの場合は、Controller Node に Left Hand と Right Hand が自動で設定されます。
Action-based の設定では、例えば Interaction Manager ゲームオブジェクトなどに、Input Action Manager コンポーネントを追加してください。推奨される Starter Assets サンプルをインストールした場合は、Samples フォルダーの XRI Default Input Actions を Input Action Manager の Action Assets フィールドに 追加することができます。この設定を行うと、所定のデフォルト値で Action-based の入力が有効になります。または、カスタマイズした Input Action とコントローラーのバインディングを作成して使用することもできます。
2. スナップターンとテレポーテーションの機能を加える
XR Origin ゲームオブジェクトに、Locomotion System、Snap Turn Provider、Teleportation Provider を追加します。
スナップターンを設定するには、Inspector で Snap Turn Provider を設定する必要があります。
Action-based の場合は、Left Hand Snap Turn Action または Right Hand Snap Turn Action、もしくはその両方に Vector 2 コントロールタイプのアクションとバインディングを設定します。
Device-based の場合は、入力がスナップターンをトリガーするように、前の手順で作成した XR Controller ゲームオブジェクトの一方または両方を含むように Controllers リストを設定します。ジョイスティック型のコントローラーでは、Turn Input Source フィールドに Primary 2D Axis を設定してください。
3. Teleportation のインタラクタブルを作成する
Unity のメインメニューから、GameObject > XR > Teleportation Area をクリックするか、GameObject > XR > Teleportation Anchor をクリックして、テレポート先となる平面を作成します。Teleportation Area は、ユーザーが指し示した子コライダー上の位置にユーザーをテレポートさせ、もう一方の Teleportation Anchor は、Teleportation Area に加えて、事前に決定された位置や回転を指定します。
手順 1 から 3 を完了したら、コントローラーでスナップターンとテレポーテーションを実行する機能を備えた基本的なシーンができています。以下の手順では、XR Ray Interactor のビジュアル変更に関する詳細を説明します。
4. 線の種類を設定する
メニューから XR Origin を作成したときに、デフォルトで XR Ray Interactor が LeftHand Controller と RightHand Controller ゲームオブジェクトに追加されました。Raycast Configuration の下に、インタラクタブルの選択に使用できる Line Type の 3 つのデフォルトオプションがあります。
- Straight Line
- Projectile Curve
- Bezier Curve
以下では、これらのオプションについて説明します。
Straight Line
Straight Line オプションを選択すると、XR Ray Interactor は Max Raycast Distance プロパティで設定されたレイの長さを使用して、シーンへの 1 つのレイキャストを実行します。上図は設定オプションを示しています。
プロパティ | 説明 |
---|---|
Max Raycast Distance | シーンに対してレイキャストする距離。 |
Projectile Curve
Projectile Curve オプションを選択すると、XR Ray Interactor は投射物の軌跡をサンプリングして放物線を生成します。コントローラーの角度を使用して、着地点までの距離を制御できます。コントローラーを持ち上げると、着地点は最初遠ざかっていきますが、コントローラーを持ち上げ続けていると着地点は近づいてきます。
Projectile Curve オプションは、テレポーテーションのシナリオでの使用が推奨されています。
プロパティ | 説明 |
---|---|
Reference Frame | 投射物の参照フレーム。このプロパティを設定しない場合は、XR Ray Interactor がローカル XR Origin の使用を試みるので、カーブは常にトラッキングスペースで上昇した後に下降に転じます。XR Origin が存在しない場合は、カーブはコントローラーに伴って回転します。 |
Velocity | 投射物の初速。この値を増やすと、カーブがより遠くに届くようになります。 |
Acceleration | 参照フレーム内で投射物にかかる重力。 |
Additional FlightTime | 投射物が着地した後の追加の滞空時間。この値を増やすと、終点の高さがより低くなります。 |
Sample Frequency | カーブのサンプルポイントの数。数を増やすと、品質が高くなります。 |
Bezier Curve
Bezier Curve (ベジエカーブ) は、起点に加えて制御点と終点を使用します。起点は XR Ray Interactor の Attach Transform の位置です。ユーザーが参照フレームを設定していなければ、Projectile Curve と Bezier Curve はどちらも Origin の参照フレームを使用します。
プロパティ | 説明 |
---|---|
End Point Distance | 起点から終点までの距離を定義します。この値を増やすと、距離が長くなります。 |
End Point Height | 起点を基準とした終点の高さを定義します。この値を増やすと、高さが高くなります。 |
Control Point Distance | 起点からカーブの頂点までの距離を定義します。この値を増やすと、距離が長くなります。 |
Control Point Height | 起点を基準としたカーブの頂点の高さを定義します。この値を増やすと、高さが高くなります。 |
Sample Frequency | カーブのサンプルポイントの数を定義します。数を増やすと、品質が高くなります。 |
5. 線の外観を設定する
XR Interactor Line Visual には、テレポーテーションやその他のインタラクションに関して XR Ray Interactor の外観をカスタマイズできる追加オプションがあります。この設定では Line Renderer コンポーネントが必要になるほか、XR Ray Interactor から線の点を使用します。
プロパティ | 説明 |
---|---|
Line Width | センチメートル単位で表される線の幅。 |
Width Curve | 起点から終点までの線の相対的な幅。 |
Valid Color Gradient | 線が有効なターゲットのコライダーにヒットしたときに、このカラーグラデーションに変化します。 |
Invalid Color Gradient | 線が無効なターゲットにヒットしたときに、このカラーグラデーションに変化します。 |
Override Line Length | このオプションを有効にすると、線のビジュアルに基本のレイキャストとは異なる長さを設定できます。 |
Line Length | Override Line Length オプションを有効にすると、このフィールドで線の変更後の長さを設定できます。この長さはレイキャストの距離より長くすることはできません。 |
Smooth Movement | 有効にすると、レイキャストの線の後から滑らかになぞる線が描画されます。 |
Reticle | テレポーテーションの移動先を視覚的に示すゲームオブジェクト。 |
アーキテクチャ
Locomotion System は 1 つの XR Origin を管理する役割を担っています。XR Origin は Unity のワールド空間内におけるユーザーの位置を処理します。Locomotion Provider が XR Origin を動かす間、Locomotion System は XR Origin へのアクセスを制限することができます。
例えば、Teleportation Provider のリクエストに応じて、Locomotion System はテレポートアクション中に XR Origin をロックします。これにより、ユーザーは現在のアクションがアクティブである間は、スナップターンや再度のテレポートといった他のアクションを実行できなくなります。
テレポートが完了したら、Teleportation Provider はシステム上で排他ロックを開放し、他の Locomotion Provider が XR Origin に影響を及ぼすことができるようにします。
Locomotion Provider は必要に応じて、独占的アクセスを持たずに XR Origin を変更することができます。ただし、Locomotion Provider に XR Origin への非独占的アクセスを付与する前に、必ず Locomotion System がビジーかどうかを確認してから、Locomotion Provider による XR Origin の変更が行われるようにしてください。
Locamotion のリクエストの全体的な流れは以下のとおりです。
- Locomotion Provider が Locomotion System の現在の状態についてビジーかどうかを確認します。
- ビジーでない場合は、Locomotion Provider が Locomotion System への独占的アクセスをリクエストします。
- リクエストに成功したら、Locomotion Provider が XR Origin を移動します。
- Locomotion Provider はユーザーの位置や回転の変更を完了した後に、Locomotion System に対する独占的アクセスを放棄します。
Locomotion System がビジーの場合や、Locomotion Provider が Locomotion System への独占的アクセスを取得できない場合に、Locomotion Provider は Locomotion System の XR Origin を変更すべきではありません。
XR Origin
Locomotion System はユーザーのアンカーとして XR Origin を使用します。
XR Origin コンポーネントのオプションを詳しく知る前に、インタラクションをサポートするために推奨されるゲームオブジェクトのヒエラルキーを把握することが重要です。
下図は XR Origin コンポーネントを示しています。
プロパティ | 説明 |
---|---|
Origin Base Game Object | トラッキング空間からワールド空間への Transform (トランスフォーム) として機能するゲームオブジェクトを示します。推奨されるヒエラルキーでは、XR Origin ゲームオブジェクトがこれに該当します。 |
Camera Floor Offset Object | デバイストラッキングの原点にユーザーの高さが含まれていない場合に、垂直方向のオフセットが適用されるゲームオブジェクトを設定します。 |
Camera Game Object | ユーザーのカメラを保持するゲームオブジェクトを示します。ユーザーのカメラがトラッキングボリュームの原点にないことがあるので、この設定は重要です。推奨されるヒエラルキーでは、Camera ゲームオブジェクトがこれに該当します。 |
Tracking Origin Mode | アプリケーションによって使用されることが望ましいトラッキング原点を設定します。 |
Camera Y Offset | デバイストラッキング原点にユーザーの高さが含まれていない場合に、Camera Floor Offset Object で指定されたゲームオブジェクトを垂直方向に動かすワールド空間ユニットの数。 |
Locomotion System
Locomotion System は、Locomotion Provider による XR Origin へのアクセスを行うための調停役として機能する MonoBehaviour です。
下図は Locomotion System コンポーネントを示しています。
プロパティ | 説明 |
---|---|
Timeout | 1 つの Locomotion Provider が Locomotion System への独占的アクセスを保持できる最長時間を制御します。デフォルト値は 10 秒に設定されています。 |
XR Origin | この Locomotion System が制御する XR Origin を選択します。シーンに必要な数の Locomotion Systems と XR Origin を持つことができます。デフォルトで、シーン内の XR Origin タイプのオブジェクトを特定します。 |
ベストプラクティスとして、Locomotion System は XR Origin ゲームオブジェクトに置くようにするとよいでしょう。詳細については、インタラクションのヒエラルキーに対する推奨設定を参照してください。
Locomotion Provider
Locomotion Provider はさまざまなロコモーションを実装します。このパッケージには複数の Locomotion Provider が含まれています。具体的には、Teleportation Provider、Snap Turn Provider、Continuous Turn Provider、Continuous Move Provider があり、いずれも LocomotionProvider
抽象クラスを実装します。以下のセクションでは、これらの詳細を説明します。
LocomotionProvider
クラスは、設定された LocomotionSystem に対する独占的アクセスのリクエストと放棄を行うシンプルなインターフェースを提供します。LocomotionSystem
クラスが設定されていない場合は、Locomotion Provider は現在のシーンで Locomotion System を特定しようと試みます。
Locomotion System への独占的アクセスをリクエストするには、BeginLocomotion
メソッドを使用します。Locomotion System へのアクセスを放棄するには、EndLocomotion
メソッドを使用します。Locomotion Provider の実装では、適宜これらのメソッドを呼び出して、Locomotion System とのインタラクションが完了した後にアクセスを放棄する必要があります。
BeginLocomotion
を呼び出してアクセスを取得しようとする前に、CanBeginLocomotion
メソッドを使用して、その時点で Locomotion System が排他モードかどうかを確認してください。
LocomotionProvider
抽象クラスには、次の 2 つのイベントも付随します。
BeginLocomotion
の呼び出し成功時にstartLocomotion
の呼び出し。EndLocomotion
の呼び出し成功時にendLocomotion
の呼び出し。
Teleportation
このパッケージは、テレポーテーションのシンプルな実装手段を備えており、LocomotionProvider
と LocomotionSystem インターフェースを使用して複雑なロコモーションのシナリオを実装することも可能です。
Teleportation Provider は LocomotionProvider
抽象クラスを継承します。Teleportation Provider はユーザーのリクエストを受けて目的の位置に Origin を移動させます。
この実装には、Teleportation Area と Teleportation Anchor という 2 種類のテレポーテーションの移動先があります。ここではそれらの詳細を説明します。概要は次のとおりです。
Teleportation Area を使用して、テレポートで移動するサーフェス上の位置を選択することができます。
Teleportation Anchor は、事前に決定された特定の位置や指定した回転先にユーザーをテレポートさせます。技術的には Teleportation Area と同様の機能ですが、アンカー機能が追加されています。
どちらのテレポーテーションの移動先も、共有コードの開始点である BaseTeleportationInteractable
を使用して、XR Interaction システムの最上部に実装されます。
XR Interaction システムは、さまざまな線のレンダリングオプションも備えています。詳細については、XR Interactor Line Visual および XR Interactor Reticle Visual のドキュメントを参照してください。
Teleportation Provider
Teleportation Provider コンポーネントは LocomotionProvider
抽象クラスを実装します。Teleportation Provider コンポーネントのインスタンスは、シーンに必要な数だけ置くことができます。しかし、ほとんどの場合は、1 つのインスタンスで十分です。ベストプラクティスとしては、XR Origin ゲームオブジェクトにこのインスタンスを配置します。
下図は Teleportation Provider MonoBehaviour を示しています。
System フィールドは、テレポーテーションプロバイダーで相互作用する Locomotion System MonoBehaviour を参照する必要があります。Locomotion System を指定していない場合は、プロバイダーが現在のシーンで Locomotion System を見つけようと試みます。
Teleportation Area Interactable
Teleportation Area Interactable は BaseTeleportInteractable
クラスを特殊にしたものです。ユーザーがサーフェス上の任意の位置を移動先として選択できるようにします。
Teleportation Area Interactable は、XR Ray Interactor やそれが特殊化されたものによって使用されることが意図されています。レイの交点とエリアの衝突ボリュームを使用して、ユーザーがテレポートする先の位置を決定します。Teleportation Area Interactable は、GenerateTeleportRequest
メソッドの特殊な実装を持ち、Teleportation Provider とともにキューに追加されるテレポーテーションリクエストを生成します。
下図の例は、Teleportation Area Interactable の一部を示す Inspector の画面です。
Teleportation Area Interactable のプロパティは、他のインタラクタブルに類似しています。下記の表には、テレポーテーションをサポートする要素のみを記載しています。
プロパティ | 説明 |
---|---|
Match Orientation | テレポーテーション後に Origin の向きを合わせる方法を指定します。以下のオプションを選択できます。
|
Teleport Trigger | ユーザーによる選択の開始時または終了時のどちらでテレポーテーションをトリガーするかを指定します。 |
Teleportation Provider | このインタラクタブルが通信する Teleportation Provider を示します。Teleportation Provider が設定されていない場合は、インタラクタブルが現在のシーンで Teleportation Provider の特定を試みます。 |
Match Orientation は、テレポート時に XR Origin の回転がどのように変化するかを指定するために使用します。
- アプリケーションで一切 Origin を回転させず、常に Origin の上向きベクトルとワールド空間の上向きベクトルを一致させる必要がある場合は、World Space Up オプションを使用します。
- ユーザーが天井、壁、その他の傾いたサーフェスに立てるようにして、その天井や壁が新しいフロアとして感じられるようにユーザーの回転を行う必要がある場合は、Target Up を選択します。Origin は、Teleportation Area コンポーネントがアタッチされる Transform の上向きベクトルに一致します。
- テレポート先に到達したときに、ユーザーを特定の方向に向かせる必要がある場合は、Target Up And Forward を選択します。このオプションにより Origin の回転は、Teleportation Area コンポーネントがアタッチされる Transform の回転に正確に一致します。
- 回転を一切変化させずにテレポートを実行し、テレポートの前後でユーザーの回転を同一に保つ必要がある場合は、None を選択します。例えば、アプリケーション全体に 45 度の角度を付ける場合は、Origin のルート Transform を回転し、すべてのテレポートターゲットに
MatchOrientation.None
を設定することができます。
Teleportation Anchor Interactable
Teleportation Anchor は BaseTeleportInteractable
クラスが特殊化されたもので、アンカーやその周囲のエリアを選択することで、ユーザーがアンカー位置にテレポートできるようにします。
Teleportation Anchor Interactable は、XR Ray Interactor やそれが特殊化されたものによって使用されることが意図されています。レイの交点とエリアの衝突ボリュームを使用して、ユーザーがテレポートする先の位置を決定します。Teleportation Anchor Interactable は GenerateTeleportRequest
メソッドの特殊な実装を持ち、Teleportation Provider とともにキューに追加されるテレポーテーションリクエストを生成します。
下図の例は、Teleportation Anchor Interactable の一部を示す Inspector の画面です。
Teleportation Anchor Interactable のプロパティは、Teleportation Area Interactable に類似しています。このドキュメントでは新しい要素のみを説明します。
Teleport Anchor Transform フィールドは、ユーザーがこのアンカーにテレポートするときの Origin のテレポート先となるトランスフォームを定義します。Match Orientation を選択している場合は、アンカーの位置と回転を両方とも使用します。
Snap Turn Provider
このパッケージは Snap Turn Provider の実装例を備えています。スナップターンとは、アプリケーションが設定済みの入力 (ジョイスティックを左に倒すとか十字キーの右を押すなどの入力) を受け取ったときに、Orgin が一定量だけ回転することです。
Input System パッケージのメリットを活用するために、Device-based の動作ではなく、Action-based の動作を使用することをお勧めします。
Action-based
下図は Snap Turn Provider (Action-based) の例を示しています。
プロパティ | 説明 |
---|---|
System | この Locomotion Provider が、XR Origin への独占的アクセスを行うために通信する Locomotion System。指定されていない場合は、Awake の呼び出し中に自動で特定が試みられます。 |
Turn Amount | スナップターンごとに Y 軸の周りで Origin を回転させる角度を指定します。 |
Debounce Time | スナップターンに成功した後、ユーザーが 2 回目のスナップターンをトリガーできるようになるまでの経過時間を指定します。 |
Enable Turn Left Right | 左右のスナップターンを有効にするかどうかを制御します。 |
Enable Turn Around | 180 度のスナップターンを有効にするかどうかを制御します。 |
Left Hand Snap Turn Action | 左手コントローラーからの入力を読み取るために使用するアクション。 |
Right Hand Snap Turn Action | 右手コントローラーからの入力を読み取るために使用するアクション。 |
Device-based
下図は Snap Turn Provider (Device-based) の例を示しています。
プロパティ | 説明 |
---|---|
System | この Locomotion Provider が、XR Origin への独占的アクセスを行うために通信する Locomotion System。指定されていない場合は、Awake の呼び出し中に自動で特定が試みられます。 |
Turn Input Source | スナップターンのトリガーに使用するコントローラーデバイスの 2D 入力軸。 |
Controllers | コントローラーリストの各要素は、スナップターンをトリガーするデバイス入力を発する XR コントローラーへの参照です。 |
Turn Amount | スナップターンごとに Y 軸の周りで Origin を回転させる角度を指定します。 |
Dead Zone | コントローラーがスナップターンをトリガーするには、このフィールドで指定された量以上の動きが必要です。 |
Enable Turn Left & Right | 左右のスナップターンを有効にするかどうかを制御します。 |
Enable Turn Around | 180 度のスナップターンを有効にするかどうかを制御します。 |
Activation Timeout | スナップターンに成功した後、ユーザーが 2 回目のスナップターンをトリガーできるようになるまでの経過時間を指定します。 |
Continuous Turn Provider
このパッケージは Continuous Turn Provider の実装例を備えています。特定の角度で個別に行われるスナップターンとは対照的に、連続的ターンは、設定された入力 (ジョイスティックを右に傾けるなど) をアプリケーションが受け取ったときに、経時的に滑らかに一定の量だけ Origin を回転させます。
Input System パッケージのメリットを活用するために、Device-based の動作ではなく、Action-based の動作を使用することをお勧めします。
Action-based
下図は Continuous Turn Provider (Action-based) の例を示しています。
プロパティ | 説明 |
---|---|
System | この Locomotion Provider が、XR Origin への独占的アクセスを行うために通信する Locomotion System。指定されていない場合は、Awake の呼び出し中に自動で特定が試みられます。 |
Turn Speed | 右回りのターンで右に回転させる 1 秒あたりの角度。 |
Left Hand Turn Action | 左手コントローラーからの入力を読み取るために使用するアクション。 |
Right Hand Turn Action | 右手コントローラーからの入力を読み取るために使用するアクション。 |
Device-based
下図は Continuous Turn Provider (Device-based) の例を示しています。
プロパティ | 説明 |
---|---|
System | この Locomotion Provider が、XR Origin への独占的アクセスを行うために通信する Locomotion System。指定されていない場合は、Awake の呼び出し中に自動で特定が試みられます。 |
Turn Speed | 右回りのターンで右に回転させる 1 秒あたりの角度。 |
Input Binding | ターンのトリガーに使用するコントローラーデバイスの 2D 入力軸。 |
Controllers | コントローラーリストの各要素は、ターンをトリガーするデバイス入力を発する XR コントローラーへの参照です。 |
Deadzone Min | 下限値。これより小さい入力値はクランプされます。クランプされた値は、あらためて最大値と最小値が [0, 1] の範囲内に正規化されます。 |
Deadzone Max | 上限値。これより大きい入力値はクランプされます。クランプされた値は、あらためて最大値と最小値が [0, 1] の範囲内に正規化されます。 |
Continuous Move Provider
このパッケージは Continuous Move Provider の実装例を備えています。テレポートとは対照的に、連続的移動は、設定された入力 (ジョイスティックを前に傾けるなど) をアプリケーションが受け取ったときに、経時的に滑らかに一定の量だけ Origin を移動させます。
Forward Source は、ジョイスティックを前に倒したときなどに Origin をどの方向に動かすかを定義するために使用します。デフォルトでは、Camera オブジェクトを使用します。この場合、ユーザーは向いている方向に前進します。このプロパティの使用例を挙げると、モーションコントローラーの姿勢を追跡する Transform にこのプロパティを設定して、持っているコントローラーの方向にユーザーを移動させることができます。
Character Controller が Origin に存在している場合は、Continuous Move Provider は Origin の Transform を直接移動させるのではなく、 CharacterController.Move
を使用してその Origin を動かします。
Input System パッケージのメリットを活用するために、Device-based の動作ではなく、Action-based の動作を使用することをお勧めします。
Action-based
下図は Continuous Move Provider (Action-based) の例を示しています。
プロパティ | 説明 |
---|---|
System | この Locomotion Provider が、XR Origin への独占的アクセスを行うために通信する Locomotion System。指定されていない場合は、Awake の呼び出し中に自動で特定が試みられます。 |
Move Speed | 前方への移動速度 (単位は秒速)。 |
Enable Strafe | 左右への移動 (横方向への動き) を有効にするかどうかを制御します。 |
Use Gravity | Character Controller の使用時に、このプロバイダーが重力の影響を受けるかどうかを制御します。 |
Gravity Application Mode | 重力が有効になるタイミングを制御します。 |
Forward Source | 前方を定義するソース Transform。 |
Left Hand Move Action | 左手コントローラーからの入力を読み取るために使用するアクション。 |
Right Hand Move Action | 右手コントローラーからの入力を読み取るために使用するアクション。 |
Device-based
下図は Continuous Move Provider (Device-based) の例を示しています。
プロパティ | 説明 |
---|---|
System | この Locomotion Provider が、XR Origin への独占的アクセスを行うために通信する Locomotion System。指定されていない場合は、Awake の呼び出し中に自動で特定が試みられます。 |
Move Speed | 前方への移動速度 (単位は秒速)。 |
Enable Strafe | 左右への移動 (横方向への動き) を有効にするかどうかを制御します。 |
Use Gravity | Character Controller の使用時に、このプロバイダーが重力の影響を受けるかどうかを制御します。 |
Gravity Application Mode | 重力が有効になるタイミングを制御します。 |
Forward Source | 前方を定義するソース Transform。 |
Input Binding | 移動のトリガーに使用するコントローラーデバイスの 2D 入力軸。 |
Controllers | コントローラーリストの各要素は、移動をトリガーするデバイス入力を発する XR コントローラーへの参照です。 |
Deadzone Min | 下限値。これより小さい入力値はクランプされます。クランプされた値は、あらためて最大値と最小値が [0, 1] の範囲内に正規化されます。 |
Deadzone Max | 上限値。これより大きい入力値はクランプされます。クランプされた値は、あらためて最大値と最小値が [0, 1] の範囲内に正規化されます。 |
Character Controller Driver
Character Controller Driver を使用して、Continuous Move Provider などによって生成されるロコモーションのイベント時に Origin にある Character Controller の高さを調整することができます。ユーザーがジョイスティックでしゃがんだり立ち上がって動こうとしたりしたときに、Origin の Capsule Collider (つまり、ユーザー自身) のサイズが自動で変更されるようにすることができます。他の Collider オブジェクトと組み合わせると、ユーザーの頭部が障害物より低くなるまで前方への動きをコンストレインするなどの用途に役立ちます。
Min Height プロパティと Max Height プロパティを使用して、動作を設定している Character Controller の高さをクランプすると、望ましくない極端な値の発生を防ぐことができます。上限を設定して、きわめて背が高いユーザーが身をかがめることなく、シーン内で一般的な身長の人として快適に振る舞えるようにするといった用途にも活用できます。
下図は、Character Controller Driver の例を示しています。
プロパティ | 説明 |
---|---|
Locomotion Provider | リッスンする Locomotion Provider オブジェクト。 |
Min Height | この動作で設定されるキャラクターのカプセルの高さの最小値。 |
Max Height | この動作で設定されるキャラクターのカプセルの高さの最大値。 |
ドキュメント改訂履歴
日付 | 理由 |
---|---|
2022 年 2 月 14 日 | ドキュメントをパッケージバージョン 2.0.0 に合わせてアップデート。 |
2021 年 5 月 12 日 | XR Origin の Tracking Origin Mode に対する変更を追加するドキュメントアップデート。パッケージバージョン 1.0.0-pre.4 に適合。 |
2020 年 1 月 10 日 | ドキュメントを確定、改訂履歴を追加。 |
2020 年 10 月 20 日 | 連続的ロコモーションを追加し、Inspector の変更に応じて更新。パッケージバージョン 0.10.0 に適合。 |