XR Interaction Toolkit 2.0 正式リリース|1.0 までの違い【XR Interaction Toolkit 2.0】

はじめに

2022年2月10日にて,XR Interaction Toolkit は pre がなくなり,2.0.0 で正式リリースとなりました.
本記事では XR Interaction Toolkit 2.0 で追加された機能や変更点,非推奨になった設定に関して一部紹介します.

検証環境

  • Unity 2021.2.14f1
  • Universal RP 12.1.5
  • XR Plugin Management 4.2.1
  • XR Interaction Toolkit 2.0.0

XR Interaction Toolkit

Unity公式記事はこちら.

blogs.unity3d.com

XR Interaction Toolkit は Unity 公式が提供しているクロスプラットフォームのAR/VR体験用のフレームワークです.

Unity 2019.4 以降では,Unity XR プラットフォームは大きく変わってます.
こちらのUnity公式記事をご覧ください.

blogs.unity3d.com

f:id:xrdnk:20200801214113p:plain

公式資料

Unity 公式が出しているドキュメントです.
docs.unity3d.com

Unity 公式が出しているサンプルプロジェクトです.
2.0.0-pre ではサンプルは止まってたのですが正式リリースに合わせてサンプルプロジェクトも更新されました.
github.com

XR Interaction Toolkit を触れるならばこちらのリポジトリを落として体験するのが手っ取り早いでしょう.

2.0.0 版と 1.0.0 版の違い

詳細はこちらに掲載されています.
docs.unity3d.com

個人的に感じた大きな違いのみを抜粋します.

新機能 (Added)

Interaction Layers (XR Interaction Toolkit 専用の Interaction 用の Layer)

Project Settings に XR Interaction Toolkit の設定が加えられ,
XR Interaction Toolkit 専用の Interaction Layers が追加されました.

f:id:xrdnk:20220304170700p:plain

こちらは結構大きな新機能かつ変更点ですが,Layer Check が Unity Physics の LayerMask ではなく
新しく導入された Interaction Layer Mask を利用するように変更されました.

Interaction Layer Mask は Unity Physics LayerMask とは独立しています.

Edit > Project Settings > XR Interaction Toolkit の画面から「Run Interaction Layer Mask Updater」を
押下することで,移行を行うことができます.

f:id:xrdnk:20220304182205p:plain

2.0.0 を最初にインストールする時にも,移行するかどうかのダイアログが表示されます.

f:id:xrdnk:20220314102700p:plain

Select Mode

Interactables に「同時に Select できる Interactor の数を制御する」Select Mode のプロパティが追加されました.
これを利用することで複数の手で同時に操作できるように設定が可能になります.

f:id:xrdnk:20220304173344p:plain

XR Grab Interactable のように Inspector で Multiple を無効化にしたい場合は,コンポーネントスクリプト
[CanSelectMultiple(false)] を設定します.

f:id:xrdnk:20220304173544p:plain

スクリプトからわかる通り,XR Grab Interactable の場合は Multiple が無効なのはデフォルトのようです.
主に XR Simple Interactable 向けだと思います.

firstInteractableSelected と firstInteractorSelecting プロパティの追加

Base Interactable に firstInteractable,Selected Base Interactor に firstInteractorSelecting のプロパティが追加されました.
現在 Select されているスタックで最初のものを返す機能です.

Allow Hovered Activate オプション

Interactor に Allow Hovered Activate の項目が追加されました.
Select 状態になっていないが Hovered 状態になっている Interactable に対して,
現在 Selecting 状態になっていない Interactor が Activate イベントと Deactivate イベントを発火できるようになります.
(ホバー状態でトリガーボタンを押すことで何等かのイベントを発火することが出来るようになります)

Movement Type を Select 中に 動的に変更可能に

Grab Interactable の Movement Type を Select 中に変更できる機能が追加されました.

f:id:xrdnk:20220314094752p:plain

MovementType は VelocityTracking,Instantaneous,Kinematic の3種類あります.

ゲームパッドジョイスティック入力のサポート

XRUI Input Module を利用した場合,ゲームパッドジョイスティック入力がサポートされるようになりました.

変更点 (Changed)

Base Interactor と Base Interactable のすべてのメソッドのシグネチャ変更

f:id:xrdnk:20220304180609p:plain

Select Mode が導入されたことにより一部のプロパティが変更

f:id:xrdnk:20220304181012p:plain

Socket Interactor の挙動変更

  • Select Mode が Single の時にのみ Select 状態を維持するように変更.
  • Grab Interactable だけでなく,全ての Interactable コンポーネントに対して Hover 時の Mesh を表示できるように変更.

EnterEventArgs / ExitEventArgs に manager プロパティ追加

HoverEnterEventArgsHoverExitEventArgsSelectEnterEventArgsSelectExitEventArgs
manager プロパティが追加されました.XR Interaction Manager を参照することができます.

Interaction Layer Mask のチェック方法の変更

今までは Interaction Layer Mask のチェックが Interactor.CanHoverInteractor.CanSelect
Interactable.IsSelectableByInteractable.IsHoverableBy で行われていましたが,
XR Interaction Manager 側の責務になりました.

XR Interactor に OnTriggerStay() を追加

XR Direct Interactor と XR Socket Interactor に OnTriggerStay() が追加されました.

最低サポートバージョン変更

2.0.0 から Unity 2019.3 以上ではなく,Unity 2019.4 LTS 以上が最低サポートバージョンになりました.

非推奨 (Deprecated)

XR Rig の廃止

XR Rig が廃止され,新しい依存パッケージの XR Core Utilities の XROrigin に置換されます.
XR Rig と XR Origin は互換性があるので,2.0.0 にアップデートする際に XR Rig は自動的に XR Origin コンポーネントに置換されます.

非推奨になったプロパティ

  • XRBaseInteractor.requireSelectExclusive → Interactable の isSelected を利用に変更
  • XRRayInteractor.originalAttachTransformrayOriginTransform 利用に変更
  • XRBaseController.GetControllerState/SetControllerState → currentControllerState プロパティに移動
  • XRControllerState.poseDataFlagsXRControllerState.inputTrackingState に変更
  • XRControllerState のコンストラクタが廃止.inputTrackingState パラメタが必須に.
  • XRControllerRecording.AddRecordingFrame(double, Vector3, Quaternion, bool, bool)AddRecordingFrame(XRControllerState) または AddRecordingFrameNonAlloc() に変更.

修正点 (Fixed)

Socket Interactor 関連

間違った Hover Mesh が表示されたりする問題が解消.

Unity Editor 再起動時の Controller Recorder のデータが消える問題

Unity Editor 再起動時の Controller Recorder のデータが消える問題が解消されています.

Interactor が無効化した後でもホバー状態が残っていた問題

XR Direct Interactor と XR Socket Interactor が非活性または破棄された後でも
XR Grab Interactable が Hover 状態のままになっていたのを修正.

終わりに

Change Log の一部のみを取り上げておりますが,検証が進み次第この記述も重要と感じたら随時更新される予定です.