1. Add grabbable hats to the scene

  • 以下のように Hat と Hook を用意
  • Hat はこれまでと同じく Grab 可能に
    • XR Grab Interactable をアタッチ
    • Rigidbody の Collisition Detection を Contenious Dynamic
    • XR Grab Interactable の Smooth Position/Rotation を enable

2. Turn the hook into a socket

  • Hook の先端に Socket 1, Attach という Empty Object を作る
    • AttachSocket 1 のさらに子オブジェクト
  • Socket 1 には Sphere ColliderXR Socket Interactor をアタッチ
    • Sphere Collider は Is Trigger 及び、 Radius を調整
    • XR Socket Interactor には Attach TransformAttach GameObject をセット
  • Attach は Socket にセットされる GameObject の位置・方向になるため、以下のように Hat の前方が下に向くようにしておく
    • Unity は Z が前方なので、前方を下に向かせれば Hat も下を向いてかけられる。
    • Y つまり、Up も Hook に対して前方にしておけば Hat の頭部分が向くようになる

3. Duplicate the sockets and attach hats

  • Socket 1 (内部に Attach) を複製して、Hook の各フック箇所にセット
  • それぞれの XR Socket InteractorStarting Selected Interactable に Hat を設定しておけば、開始時に最初から Socket にかかっている状態になる

4. Put hats on your head

  • 自分でかぶれるようにする
  • Socket に Attach を指定しない代わりに、少しだけ上にずらす
  • XR Socket InteractorSphere Collider をアタッチ
    • Radius は Hook より少し大きめにしておく

5. Prevent other GameObjects from acting like hats

Layer を使って、なんでも Hat と同じように「頭にかぶる」、「Hook にかける」ができないように。

  • Layer に新しく Hats を作成
  • XR Grab Interactable を持つものに対して以下のようにセット
    • Hats
    • Hats 以外
      • Default のまま
  • XR Socket Interactor を持つもの(現在は Hook と MainCamera のみ) を以下のように設定
    • Hat に反応するもの
    • それ以外
      • おそらく Everything から Default に変更

XR Interaction Toolkit 設定での Interaction Layers への反映

上記で利用される Layer は Project Settings の XR Interaction Toolkit の Interaction Layers に追加されるようです。