PlayMakerでOculusのコントローラー操作を実装する方法【Oculus Touch Playmaker - Toolkit】 

この記事は2021年STYLYアドベントカレンダーの17日目の記事です。
# はじめに
UnityでVRゲームを作るとき、HMDのコントローラー操作を実装するには、一般的にC#スプリクトを作成して実装すると思います。
日本語の情報も多いので、調べればC#で問題なく実装できる方が多いかと思います。
ただし、私はUnityではPlayMakerばかり使っていたため、C#はよくわからん…というかPlayMakerで作り始めたから今更C#で作り直したくないぞ～となっていました。
どうにかPlayMakerだけで実装できる方法を探したところ、有料アセットを使うことでPlayMakerだけでHMDのコントローラー操作を実装できることがわかったので、使い方を紹介します。

私のようにPlayMakerでVRゲームを作りたい方が参考になれば幸いです。
またPlayMakerに慣れていれば簡単に使えるので、PlayMakerを使っているSTYLYユーザーにおすすめできるアセットです。

# アセットの紹介
今回紹介するアセットは、Oculus Touch Playmaker - Toolkitです。

https://assetstore.unity.com/packages/tools/game-toolkits/oculus-touch-playmaker-toolkit-90963?locale=ja-JP

PlayMakerでOculus系統のコントローラー操作の設定ができるようになるアセットです。
各種ボタンやトリガーを使った入力が可能となるので、モノを掴む動作など、コントローラーを使った基本的な操作は一通りできるようになります。
動画でも紹介されていますので、参考にしてみてください。

<iframe width="560" height="315" src="https://www.youtube.com/embed/wTEj10ebFeE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


#環境設定
Oculus Touch Playmaker - Toolkitを使うために、Oculus Integrationがインストールされていることが前提となります。
Oculus Integrationはこちらからダウンロードできます。

https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022?locale=ja-JP

Oculus Integrationのインストールからプロジェクトの環境設定については、こちらの記事が参考になると思います。

https://framesynthesis.jp/tech/unity/oculusquest/

以上の記事の通り、UnityのバージョンはOculus Integrationの対応バージョンの都合上、Unity2020.2.0f1を使っています。
STYLYの推奨バージョンであるUnity2019.3.6f1と異なることに注意してください。


# アクションの使い方
## アクションの紹介
インストールが完了していると、PlayMakerのアクションウインドウにOculusという項目が追加されているはずです。
![2021-12-15_00h11_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505327/d94a0e9d-2520-2f23-67e1-1ef3f745a0bf.png)
全20種類のアクションのうち、私が使ってみて機能が理解できたものをまとめました。
PlayMakerに慣れている方であれば、特に問題なく使えると思います。

|アクション名|機能  |
|---|---|
|Get Controller Velocity|コントローラーの速度を取得します。|
|Get Oculus Boundary|Oculusで設定しているプレイエリアや境界の大きさを取得します。|
|Get Oculus Recenter|プレイヤーが向いている方に正面をリセットします。(Oculusボタンと同じ)|
|Get Touch Controller Acceleration|コントローラーの加速度を取得します。|
|Get Touch Controller Angular Acceleration|コントローラーの角加速度を取得します。|
|Get Touch Controller Angular Velocity|コントローラーの角速度を取得します。|
|Get Touch Controller Position|コントローラーの位置を取得します。|
|Get Touch Controller Rotation|コントローラーの角度を取得します。|
|Get Touch Controller Velocity|コントローラーの速度を取得します。|
|Get Touch Controller Vibration|バイブレーションを発生させます。|
|Get Touch Button|各種ボタンの入力を取得します。|
|Get Touch Near Touchpad|コントローラーのトリガーに指が触れているかどうかを検知します。|
|Get Touch Thumbstick Axis|コントローラーのスティックの傾き具合を検知します。|
|Get Touch Touchpad|コントローラーの各種ボタンに指が触れているかを検知します。|
|Get Touch Trigger Axis|コントローラーのトリガーの押し具合を検知します。|

##Get Touch Bottonアクション
「Get Touch Botton」アクションの使い方を紹介します。
Get Touch Buttonアクションを追加すると、各種ボタンやトリガーの入力を検知できるようになります。
これを使うことで、コントローラーのボタンを押したときに、オブジェクトを表示したり、ものを掴んだりできるようになります。
アクションの設定項目については以下の通りです。
![2021-12-15_01h28_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505327/71ebf4b2-58da-9f5d-43f4-68f872b4d956.png)

|項目名|内容 |
|---|---|
|Touch Controller|左右どちらのコントローラーかを指定する。|
|Button|どのボタンもしくはトリガーの入力を取得するか指定する。|
|Button Type|Get Button/Get Button Down/Get Button Up（ボタンを押している間/ボタンを押し切った時/ボタンを押し終わった時）|
|Send Event|入力を取得後のイベントの指定|

Get Touch BottonやGet Touch Touchpad、Get Touch Near Touchpadアクションには共通してButtonの項目があります。
ボタン名とコントローラーのボタンは以下のように対応しています。

|ボタン名|Left Controller |Right Controller |
|---|---|---|
|One|Xボタン|Aボタン|
|Two|Yボタン|Bボタン|
|Start|Menuボタン|Oculusボタン|
|Primary Thumbstick|スティック押し込み|スティック押し込み|
|Primary Hand Trigger|中指のトリガー|中指のトリガー|
|Primary Index Trigger|人差し指のトリガー|人差し指のトリガー|

##Get Touch Controller Vibrationアクション
Get Touch Controller Vibrationを使うと、バイブレーションを発生させることができます。
Get Touch Bottonアクションの遷移先のステートにこのアクションを追加すると、押したかどうかを判断できるのでおすすめです。
![2021-12-15_02h08_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505327/ce52fe21-e60b-1467-8b86-c6bfcad2e5a8.png)

# サンプルシーンについて
「Oculus Playmaker」というフォルダの中に、動画でも紹介されている「Example」というサンプルシーンがあります。
![2021-12-14_23h00_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505327/609795f3-9d4d-1575-237b-cdafaacbfa20.png)
このシーンでは、コントローラーを使って何ができるかを紹介しています。
銃やボールを持ったり、パンチングマシンで遊んだりできます。
![2021-12-14_23h01_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505327/38918232-d833-fb9c-31d3-e732e698ebb5.png)

ここでは紹介できませんが、サンプルシーンを仕組みを学ぶことで、オブジェクトを掴む方法やスティック操作の方法に関する理解が深まると思います。

# おわりに
Oculus Touch Playmaker - Toolkitの使い方は以上となります。
2年前からアドベントカレンダーで記事を書いてみたいと思っていたので、参加できてよかったです！
記事はとてもニッチな内容でしたが、PlayMakerでVRゲームを作りたい方に役立てば嬉しいです。

最後に、STYLY MAGAZINEでもUnityやPlayMakerに関する記事を書いているので、是非こちらも見に来てください！

https://styly.cc/ja/tips/