# XR資料 step1:概要編
## XR_interaction_toolkitとは
以下が公式ドキュメントの説明を抜粋した内容
公式ドキュメントのリンクは[ここ](https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@0.9/manual/index.html)を参照。
> XRインタラクションツールキットパッケージは、高レベルのコンポーネントベースのインタラクションシステムです。
Unity入力イベントから3DとUIの相互作用を利用できるようにするフレームワークを提供します。
このシステムの中核は、基本的なInteractorコンポーネントとInteractableコンポーネントのセット、およびこれら2つのタイプのコンポーネントを結び付けるInteractionManagerです。
また、ビジュアルを描画したり、独自のインタラクションイベントをフックしたりするための機能を拡張するために使用できるヘルパーコンポーネントも含まれています。
>
> XRインタラクションツールキットには、次のインタラクションタスクをサポートする一連のコンポーネントが含まれています。
> - クロスプラットフォームのXRコントローラー入力
> - 基本的なオブジェクトをホバーし、選択してつかみます
> - XRコントローラーを介した触覚フィードバック
> - 可能でアクティブな相互作用を示す視覚的フィードバック(色合い/ラインレンダリング)
> - XRコントローラーとの基本的なキャンバスUIの相互作用
> - 静止した部屋規模のVR体験を処理するためのVRカメラリグ
現在はプレビュー版であるため、安定版がリリースされているのを待っている形となる。
- ViveやValveIndex
- WindowsMR
- Oculus
等に対応している。
## 開発環境のバージョン等
Viveを用いているため、Viveだけの設定方法を記す。
XRやOculusはもっと簡単になるはず。
OpenVR:unity 2019.4.14f
その他:unity 2019.4.14f以降
2019.4.14f以前ではエラーが吐かれたので使用は不可能である。
## インストール方法
> [注]htcViveやValveIndexなど、valve系のVR機器はOpenVRというAPI(=「すでに開発されているアプリケーションおよびソフトウェア」と「第三者が開発したプラグラム」を仲介するもの)を介して情報が伝達されてくる。以後、OpenVRという記述を用いる。
### パッケージのダウンロード
PacKageManagerからダウンロードする形になっている。
PacKageManagerからのダウンロード方法は[ここ](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@2.0/manual/index.html)を参照。
メニューバーから以下の手順でPackageManagerを開く。
Window -> Package Manager
PreviewPackageを有効にする

All Packagesを選択する

XR Interaction Toolkitを探し出す。
探し出せたら、右下にあるInstallボタンからダウンロードができる。

### ProjectSettingsの設定
メニューバーから以下の手順でXR settingsを開く。
Editor -> ProjectSettings -> plyer -> XR settings

Virtual Reality Supportedにチェックを入れると、既にPCにインストールされているSteamVRからunityが自動的にAPIを取得してくれる仕組みとなっている。
以上で環境構築は終わり。
## XR_Interaction_toolkitは何がいいのか、SteamVRとは何が違うのか、今後について
### [追記]open XR について
先述のとおり、openVRがXR Plugin Managerに対応していない。
OpenVR の XR Plug-in Framework 対応に難航しているため、のようである。
これを打開するために、valve側がopenXRに対応させるように方針が転換されつつある。
* [参考](https://zenn.dev/amamagi/articles/b85034c48e86a9)ページ。
実際にopenXRを使用した場合のアクション例が以下の動画になる。
**この動画を見る限りでは、open XRを用いることで、valve製品がXR Plugin Managerに対応しているようである!!**
* [openXRを用いてVR開発した場合の参考動画](https://youtu.be/u6Rlr2021vw)
今後は、開発にはopenVRを用いるのではなく、openXRが主流になるだろう。
もし、XR interaction toolkitを用いて開発する場合は、openXRを使用するべきであろう。
### XR settingsとXR Plugin Managerの違いについて
* XR settingsは、
` Editor -> ProjectSettings -> plyer -> XR settings `
* XR Plugin Managerは、
` Editor -> ProjectSettings -> XR Plugin Manager `
直下にある。Unity2020以降のバージョンではXR settingsがレガシーとなり、XR Plugin Managerに統一されている。
しかし現状問題として、OpenVRはXR Managerに対応していない。
詳しくは、以下のリンクを参考に
- [Qiitaのリンク](https://qiita.com/shiena/items/87cbdfb8c8ba7834e088)
- [海外の方のブログ](https://skarredghost.com/2020/09/25/steamvr-unity-xr-interaction-toolkit-input/)
ここで、有志の方がXR Manager用のツールを公開している。
しかし、HMDの動きはXR settingsで取得できても、コントローラ等の動きが対応していないため、現状は開発は不可能である。
1. [github](https://github.com/ValveSoftware/unity-xr-plugin/releases/tag/installer)のリポジトリから(sourcecode.zip)をDLする。
3. (OpenVR-XR-Plugin-Installer.unitypackage)をダウンロードしてから、unityにアセットとして入れる。
3. アセットとして認識されると、XR Plugin Management下にOpenVRが増えているのを確認する。

また、Windows MR やOculusはXR plugin Managent対応しているものの、XR plugin ManagentのInitialize XR on Startupにチェックを入れると、必然的にXR settingsが使えなくなる。
そのため、OpenVRを対応させることができなくなり、レガシーの設定に頼らざるを得ない。
### XR_Interaction_toolkitとSteamVR pluginの違いについて
SteamVR plugin 2.0が公開され、現在の開発の主流はそちらであるといえる。
以下のリンク先ではSteamVR pluginかXR Interaction Toolkitのどちらで開発するべきかという議論がなされている。
https://www.reddit.com/r/learnVRdev/comments/ingctm/unity_xr_toolkit_vs_steamvr_plugin/
---
個人的意見としては、
- steamVR pluginは、VRTKの上位互換といえる機能を持ち、発展的な体験を作るためには必須といえるライブラリと感じる。しかし、unityの機能として組み込まれているわけではないため、マネージャー部分のスクリプトが複雑でユーザはなかなか触りにくいというデメリットがある。
- XR Interaction ToolkitはsteamVR pluginやVRTKと比べても、まだまだ機能が少ないと感じる。しかし、プログラムが単純で簡単に機能を理解しやすいというメリットがある。さらに、oculusやwindowsMRの開発が行いやすくなっている。様々なVRデバイスでゲームを遊びたいとき、プログラムを理解して新たに機能を追加する場合、は扱いやすいと考えられる。
---
現時点では、APIにOpenVRを用いて、ライブラリとしてXR_Interaction_Toolkitを用いて開発を行うことは不可能に近い。そのため、大規模な開発を考えている場合はSteam VRを使うことをお勧めする。
OpenVRに関してはunity2019でしか正常に動かないため、今後にUnity側で対応されるのを待つしかない。その反面、単純なVRアクションゲームを作るのは簡単であるため、
XR_Interaction_Toolkitを利用するのも視野に入れてはどうだろうか。