1.2 - VR Locomotion
1.2 - VR Locomotion - Unity Learn
1. Fill the room with furniture

2. Add snap turning
XR Origin (VR)の子として Locomotion を作成
- チュートリアル通りに、
Add Character Controllerボタンを押すとXR Origin (VR)にCharacter Controllerが付いた 
- Snap Turn
- Snap Turn Provider | XR Interaction Toolkit | 3.4.0-pre.2
- 日本語だと少しバージョンが下がる
- Snap Turn Provider (Action-based) | XR Interaction Toolkit | 2.0.1
-
このロコモーションプロバイダーによって、ユーザーは入力システムアクションからの 2D 軸入力を使用してリグを回転できます。
- 日本語だと少しバージョンが下がる
- Snap Turn Provider | XR Interaction Toolkit | 3.4.0-pre.2
- デバッグ実行すると確かに左右コントローラーモードにした状態で A/D キーを押すとスナップ回転する
3. Add Continuous turn
disorienting for people new to VR: VR 初心者には方向感覚を失わせる- Snap Turn と Continuous turn を同時に有効にするのは良くないので、左右のコントローラで切り替えるようにする
4. Add a teleportation area
- これまでと同様に
XR Origin (VR) -> Locomotionの下にTeleportという GameObject を作りTeleportation Providerを付ける - 今回は部屋の中央にある Rug に
Teleportation Areaをアタッチし、Teleportaion Providerプロパティに先ほど作成したTeleportGameObject を入れる - 実行すると、Ray が白く変わる

Gキーで Teleport が発動します
4.1 XR Origin 配下の修正
- ここまで Hand Controller のメッシュが Debug 時に見えていなかったのですが、どうやら
Right/Left Hand ControllerがCamera Offsetの中に入っていなかったようです。- 構造を以下のように修正しました

- 加えて、
Character ControllerのHeightに合わせてCenterも0 -> 0.56に変更しました。 
- これで常にコントローラーが前に見えている状態になりました

5. Add teleportation anchors
- 向きを指定してテレポートできるように
- ドアの方向にローカルの X が向くようにして配置
Teleportation AnchorTeleportation Configuration -> Match OrientationをTarget Up And Forward二変更
- この状態でテレポートすると、ドアの方向を向いてテレポートされる
- このオプションだと、テレポート先のオブジェクトのローカル座標を必ずテレポート結果の方向に合わせなければいけないが、前方に関する設定値はこれしかない。
6. Customize the teleportation reticles
- これまではテレポートエリア/アンカーに手から伸びるラインが接触したかの判定は「白く変わる」だけだったが、さらに Reticle を追加する
Teleportation Area/Anchor- どちらにも
Custom Reticleという項目があるので、そこに Reticle の Prefab を追加 
- どちらにも


6.5 Teleportation Anchor と Area の違い
TeleportationAnchor と TeleportationArea は、どちらも Unity XR Interaction Toolkit でテレポート移動を実現するためのコンポーネントですが、**「移動先の決定方法」**に大きな違いがある。
1. Teleportation Area
ユーザーが指し示した(レイが当たった)正確な位置にテレポートする。
- 動作: コライダー上のどの場所でも、レイキャストが当たったその一点が移動先になります。
- 主な用途: 床、地面、広場など、ユーザーが自由に歩き回れる広い平面に使用します。
- コード上の特徴: TeleportationArea.cs の GenerateTeleportRequest メソッドを見ると、移動先 (destinationPosition) に raycastHit.point(レイが当たった位置)を使用しているのが分かる。
teleportRequest.destinationPosition = raycastHit.point;
2. Teleportation Anchor (テレポートアンカー)
ユーザーがどこを指しても、あらかじめ決められた特定の位置と向きにテレポートする。
- 動作: アンカーのコライダーを指し示せば、レイがどこに当たったかに関係なく、設定された Teleport Anchor Transform の位置と向きに強制的に移動させられます。
- 主な用途: 特定の立ち位置、椅子の前、ワープポイント、別の部屋への入り口など、「ここに立ってほしい」「こっちを向いてほしい」という意図がある場所に使用します。
- コード上の特徴: TeleportationAnchor.cs では、raycastHit の情報は使われず、設定されたアンカー (m_TeleportAnchorTransform) の位置と回転が使用される。
var pose = m_TeleportAnchorTransform.GetWorldPose();
teleportRequest.destinationPosition = pose.position;
teleportRequest.destinationRotation = pose.rotation;| 機能 | Teleportation Area | Teleportation Anchor |
|---|---|---|
| 移動先 | レイが当たったその場所 (自由) | 設定された固定位置 (指定) |
| 向き | プレイヤーの向きを維持 (設定による) | 設定された固定の向きに補正 |
| 用途 | 自由移動できる床や地面 | 定位置への移動 (操縦席、スタンド、ワープ) |
| 例えば、部屋の中を自由に歩かせたいなら Area を床に貼り付ける。 「このボタンの前に立って操作してほしい」といった場合は、その位置に Anchor を置くと思い通りになるかも。 |

