1. Prevent ray from picking up GameObjects
現状は XR Ray Interactor で、 XR Grab Interactable を掴んでいるが、これをテレポート用にする
- Interaction Layer に
Raycastsを新たに追加する - Project Settings からも確認できる

-
Right/Left Hand Controller 内の
Right/Left Ray InteractorのInteraction Layer Maskを Raycastsのみ にする
-
さらに、現状、「何かを掴んだら、手のモデルを非表示にする」となっているので、
Right/Left Ray InteractorのXR Ray InteractorのSelectイベントを「削除」する

- テレポートエリアの
Teleportation AreaのInteraction Layer Maskを Raycastsのみ にする

2. Add a near far interactor for each hand
XR Interaction Toolkit の ver3 までは、近距離用の Direct Interactor と遠距離用 Ray Interactor の 2 種類を使い分けて Grab を実装する必要があった。
ここまでのチュートリアルでは Ray Interactor と XR Grab Interactable の Far Attach Mode のモードの使い分けで、近距離遠距離を使い分けていた。

ver3 からは Near-far Interactor が入り、一つのコンポーネントで Direct と Ray の両方の Grab の機能を満たせるようになった。

-
Near-Far Interactor を追加すると以下のコンポーネントが付いたオブジェクトが作成される

- Interaction Attach Controller: GameObjectが掴んだときに手やコントローラーにどのように取り付けられ、オフセットや回転を制御するか
- Sphere Interaction Caster: Sphere Volume をキャストし、近くのゲームオブジェクトを検出して相互作用する
- Curve Interaction Caster: 遠距離インタラクション用の曲面光線を投影
-
Near-Far Interactor を追加した後、 Preset の変更を行う。
- Input System との連携のために必要
- あまり行わない操作ですが、3ドットメニューの左にあります。
-
選ぶのは
Assets/Settings/NearFarInteractor.preset- 左手の場合は
Assets/Settings/Left_NearFarInteractor.perset
- 左手の場合は
| Preset 変更前 | 変更後 |
|---|---|
![]() | ![]() |
-
実行時には以下のようになる
-
ここまでの
XR Ray Interactorと同じように設定するInteraction Layer MaskにHatsを追加- 当然ここでは
Raycastsは入れない
- 当然ここでは
- Select/Select Exited イベントで手のモデルを消したり表示したりする
![]() | ![]() |
-
Near-Far Interactor の子オブジェクトの
Line Visualオブジェクト- ここは自由に設定してよい
Curve Visual Controllerの Line Dynamics Mode を調整することで、Interactor に反応する GameObject が無い場合には、 Ray が手元に戻るような表現ができる
-
この時点では、まだ
XR Ray Interactor(ここで Teleport Interactor にリネームする) のレイもあるため、どっちのレイなのか分かりにくい。
3. Add haptics and audio to the NearFar Interactor
ここでは、 Ray Interactor に付けていた Haptic Feedback の仕組みを Near-Far Interactor にも付ける。
| Right Hand Controller > Near-Far Interactor | Left Hand Controller > Near-Far Interactor |
|---|---|
![]() | ![]() |
Haptic Impulse Playerには自動で自身に近いHaptic Impulse Playerの GameObject が入る- Parent も辿って取得している
public class SimpleHapticFeedback : MonoBehaviour
{
protected void Awake()
{
if (m_PlaySelectEntered || m_PlaySelectExited || m_PlaySelectCanceled ||
m_PlayHoverEntered || m_PlayHoverExited || m_PlayHoverCanceled)
{
if (m_HapticImpulsePlayer == null)
CreateHapticImpulsePlayer();
}
}
void CreateHapticImpulsePlayer()
{
m_HapticImpulsePlayer = HapticImpulsePlayer.GetOrCreateInHierarchy(gameObject);
}4. Switch Between Teleport Near Far Interactor rays
ここまででは、Ray Interactor と Near-Far Interactor のレイが重なってしまっているので、テレポート用の Ray Interactor のレイは特定のボタンを押した時だけにする。
![]() |
|---|
![]() |
![]() |
| Left Hand Controller | Right Hand Controller |
|---|---|
![]() | ![]() |
5. Add an additional binding and repeat for other hand
他のボタンでも使えるようにする
primaryButtonに追加してthumbstickTouchedに binding を追加する。
| Left Hand Controller | Right Hand Controller |
|---|---|
![]() | ![]() |













