【Unity】HaritoraX+OculusQuestで6点トラッキング

[NITMic Advent Calendar 2021](https://adventar.org/calendars/6930) 4日目の記事です。
**HaritoraX**を使って6点トラッキングをしようとした際、ネットの情報が少なかったり古かったりで困ったので、メモとして残したいと思います。  

https://izm-11.hatenablog.com/entry/2021/07/16/185910
# 想定読者
* **HaritoraX**と**OculusQuest**を使ってUnity上で6点トラッキングを行いたい人

前提としてHaritoraXのセットアップ（SteamVRへのHaritoraXアドオン導入等）は完了しているものとします。HaritoraXのセットアップに関しては[**HaritoraX公式オンラインマニュアル**](https://docs.google.com/document/d/1LvgCMlyw8bH-926J5vYcPvu0tPMuQuMKHAeEjsCC_I0/edit)を参考にしてください。
# 完成図
<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/80fa5a9a-4086-86ba-077e-7dc1f3644004.gif">

# 環境
* Unity 2020.3.20f1
* HaritoraX  
* OculusQuest（Oculus Link）

## SteamVR Pluginのインポートと初期設定
新規プロジェクトを作成し、SteamVRをインポートして、初期設定を行います。

1. SteamVR Pluginをインポート（インポート完了時にUnity の設定を SteamVR の推奨設定に変更するウィンドウが開くので、左下の「Accept All」をクリック）
2. Unity > Edit > Project Settings > XR Plug-in Managementの OpenVR Loader にチェックを入れる
3. Window > SteamVR Input メニューを開く（開くと`It looks like your project is missing an actions.json. Would you like to use the example files?`というメッセージが出るので、「Yes」を選択）
4. 開いたSteamVR Inputウィンドウの左下にある「Save and generate」をクリック

下記記事を参考にさせて頂きました（というかそのまんまです）

https://framesynthesis.jp/tech/unity/htcvive/#unity-%E3%81%A7-steamvr-%E5%AF%BE%E5%BF%9C%E3%82%BD%E3%83%95%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%AB%E3%81%AF

これにて、SteamVR Pluginの初期設定は完了です。この記事では、今インポートしたSteamVR Plugin内にあるプレハブの**[CameraRig]**と**controller**を利用して、トラッキングポイントを取得します。
<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/0715a918-b93c-2018-6af4-3a794351dcdd.png">
## ①OculusQuestで3点トラッキング
1. Assets > SteamVR > Prefabs > [CameraRig] を Hierarchyにドラッグ&ドロップ
    <img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/877c6e7a-3b33-ca8d-6e65-adfa6d08b809.png">
2. **OculusQuest**を**OculusLink**でPCに接続し、SteamVRを起動させた状態でPlayボタンを押す  
頭、右手、左手で3点がトラッキングできています。  
    <img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/9ac63ea9-8381-dd9b-e01b-1f79ff1c5bd2.gif"> 

うまくトラッキングポイントを取得してくれない時があったので、その場合は再起動等をしてみてください。

## ②HaritoraXのトラッキングポイントを追加して6点トラッキング
**HaritoraX**のトラッキングポイントは、`SteamVR_TrackedObject.cs`をオブジェクトにアタッチすることで取得できます。
以下のデモでは、SteamVR Plugin の**controller**プレハブに`SteamVR_TrackedObject.cs`をアタッチさせることでトラッキングポイントとしています。

1. Assets > SteamVR > Prefabs > controller を Hierarchyに腰用、右足用、左足用の３つをドラッグ&ドロップ  
    <img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/85e48dca-80f5-3778-5fc8-8f9b61e3c74f.png">

2. **controller**プレハブの`Steam VR_Render Model.cs` のIndexをそれぞれDevice1(腰)、Device2(右足)、Device3(左足)に設定
    この時点でHaritoraConfiguratorを起動させてPlayボタンを押すと、Scene上のcontrollerがかわいいトラ？になります。現時点ではHaritoraXのトラッキングポイントを取得して見た目を設定させただけなので、まだトラッキングはしてくれません。  
    <img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/ada75b53-7a5f-67f6-2c38-34b2bd403487.png">  

3. **controller**プレハブに`SteamVR_TrackedObject.cs`をアタッチし、IndexをそれぞれDevice1(腰)、Device2(右足)、Device3(左足)に設定  
    <img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/cd7e6623-b57f-c003-2764-e149ef4f9697.png">  

これにて、腰と右足と左足もトラッキングができ、6点トラッキングが可能になりました！  
<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314845/80fa5a9a-4086-86ba-077e-7dc1f3644004.gif">  

結局のところ、任意のオブジェクトに`SteamVR_TrackedObject.cs`をアタッチして、IndexのところをDevice1,2,3にすれば良いみたいです。このトラッキング情報をFinalIK等で利用すれば、色々面白いことができそうですね。

# 参考

* [Unity＋SteamVR開発メモ（HTC Vive、Valve Index、Oculus Quest対応） - フレームシンセシス](https://framesynthesis.jp/tech/unity/htcvive/#unity-%E3%81%A7-steamvr-%E5%AF%BE%E5%BF%9C%E3%82%BD%E3%83%95%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%AB%E3%81%AF)
* [HaritoraX公式オンラインマニュアル](https://docs.google.com/document/d/1LvgCMlyw8bH-926J5vYcPvu0tPMuQuMKHAeEjsCC_I0/edit#)

https://twitter.com/dokudamichang/status/1435132486183387137?s=20