Oculus Integration の OVRGrabber/OVRGrabbable から Unity XR Interaction Toolkit の XR Interactor/XR Interactable に移行する時のメモ書きです.
移行の動機
次のような理由から移行を決めました.
- Oculus の機器以外にも対応できる
- XR Interactive Toolkit の方が設定が直感的かつ豊富
- OVRGrabber/OVRGrabbable はバグが放置されている
XR Controller
- デフォルトの設定だと,XR Controller の原点は OculusTouch の A/X ボタンあたりにある.
- コントローラを表示する場合は
Model Prefab
にオブジェクトを Attach する Model Transform
はXR Controller
がアタッチされているオブジェクトの子オブジェクトとして設定する.Model Transform
にModel Prefab
が表示される.Animate Model
をTrue
にするとModel Prefab
を動かすことができる(手などに使える).Model Select Transition
には Select 時の Animation State に遷移するための Trigger 名を入れる.
XR Controller には Unity の Input System を使った Action-based のものとそうでないものがあります.公式サンプルが Action-based であることと,ボタンのリマップができるので Action-based なものについて話していきます.
XR Interactor
Oculus Integration とXR Interaction Toolkit では同じ動作でも次のように言い方が違います.
Unity | Oculus |
---|---|
Select | Grab |
Activate | Trigger |
Interactor.isSelectActive
は物を持っている時true
, 持っていない時false
- ボタンの押し込み度合いの取得 (action は
selectAction
など):
float x = action.ReadValue<float>();
- スティックの倒し度合いの取得 (
rotateAnchorAction
など):
Vector2 output = action.ReadValue<Vector2>();
AttachTransform
で持つ場所を指定する
XR Grab Intaractable
AttachTransform
で持たれる場所を指定する
Callback の指定:
OnEnable()
内などで callback を追加します.
interactable.onSelectEntered.AddListener (callback);
OnDisable()
などで callback を削除します.
interactable.onSelectEntered.RemoveListener (callback);
onSelectEntered
: 持った時onSelectExited
: 離した時onActivate
: 引き金を引いた時onDeactivate
: 引き金を離した時
コメント