【Unity】GearVR ＆ OculusGoのコントローラー入力やセンサーの値が簡単に取れるアセットEasy Input for Gear VR and Oculus Go

#はじめに
「[EasyInputforGearVRandOculusGo](https://www.assetstore.unity3d.com/#!/content/88829?aid=1100l3oC8)」とは
![Easy Input for Gear VR and Oculus Go - Asset Store - Google Chrome 2018-08-30 15.24.03.png](https://qiita-image-store.s3.amazonaws.com/0/158441/f9c4e3d3-7ff9-0bc4-ca02-26abeb380afa.png)
>Oculus Go、Gear VR、Gear VRモーションコントローラをサポート！

>Gear VRとOculus Goの簡単な入力は、Gear VRとGear VR Controllerの入力を簡単にサポートします。ヘッドセット、Bluetoothコントローラー、または新しいモーションコントローラーのサポートが必要な場合は、使いやすいAPIでプラットフォーム固有のすべてにアクセスできます。多くの一般的なタスクでは、オブジェクトにアタッチする高レベルのコンポーネントが公開されるため、1行のコードを書く必要はありません。しかし、汎用性は残っています。カスタムコードを記述したい場合は、そうするのが簡単です。

>特徴
*ギアVRヘッドセットのサポート
*ギアVRコントローラのサポート
* Oculus Goサポート
*ゲームパッドのサポート
*事前作成されたコントロールなのでコーディングは必要ありません
*グラブ、移動などが簡単にできました
*クイックプロトタイプのエディタでエミュレート
*動きのサポート
*レーザーポインタのサポート
* 8シーンの例
*簡単なコールバックはカスタムを何でもする

#動作環境
Mac 10.13.6
Unity 2018.2.5f1
Easy Input for Gear VR and Oculus Go 1.2

#セットアップ
アセットをインポートしたら下記の画面が出ます
この画面は推奨設定と必要なOculusユーティリティへのリンクを含むエディタウィンドウが表示されますのでもともと実機で動いている環境であれば再度設定する必要がないのでIgnoreAllで大丈夫だと思います。
![GearVRSettings 2018-08-30 15.36.50.png](https://qiita-image-store.s3.amazonaws.com/0/158441/f85e5eab-60ed-839e-bb5a-0032281eebcb.png)

#コントローラ入力の取得
始めにいきなり入力の制御をせずにAssets\Easy Input for Gear VR\Scenesにサンプルシーンが入っているので、最初のシーンに「MasterExample」を設定して（他のシーンは順番適当でいいです）確認するのがオススメです

##コントローラーイベント系
**名前空間**
`using EasyInputVR.Core;`

```c#:
void OnEnable()
{
  //タッチした瞬間
EasyInputHelper.On_TouchStart += localTouchStart;
//タッチを離した瞬間

  //タッチを離した瞬間
  EasyInputHelper.On_TouchEnd += localTouchEnd;
  //タッチ中
  EasyInputHelper.On_Touch += localTouch;
  //一定時間タッチした瞬間
  EasyInputHelper.On_LongTouchStart += localLongTouchStart;
　　　　//一定時間タッチをして離した瞬間
  EasyInputHelper.On_LongTouchEnd += localLongTouchEnd;
　　　　//一定時間以上タッチしている中
  EasyInputHelper.On_LongTouch += localLongTouch;
  //タッチして一定時間以内に離した瞬間
  EasyInputHelper.On_QuickTouchEnd += localQuickTouchEnd;
　　　　//タッチして一定時間以内にもう一度タッチして離した瞬間
  EasyInputHelper.On_DoubleTouchEnd += localDoubleTouchEnd;
  //スワイプした瞬間
  EasyInputHelper.On_SwipeDetected += localSwipe;
  //物理ボタン系イベント
  EasyInputHelper.On_Click += localClick;
}
void localTouchStart(InputTouch touch){}
void localTouchEnd(InputTouch touch){}
void localTouch(InputTouch touch)
{
　　　　//コントローラーある場合（OculusGoなど）
　　　　if (EasyInputHelper.touchDevice == EasyInputConstants.TOUCH_DEVICE.MotionController)
  //タッチパッドがHMDに付いている場合(GearVRなど)
  if (EasyInputHelper.touchDevice == EasyInputConstants.TOUCH_DEVICE.HMD)
  //タッチポジションX軸
  touch.currentTouchPosition.x
　　　　//タッチポジションY軸
  touch.currentTouchPosition.y
}
void localLongTouchStart(InputTouch touch){}
void localLongTouchEnd(InputTouch touch){}
void localLongTouch(InputTouch touch){}
void localQuickTouchEnd(InputTouch touch){}
void localDoubleTouchEnd(InputTouch touch){}
void localSwipe(InputTouch touch){}
void localClick(ButtonClick button)
{
　　　　　　　　if (button.button == EasyInputConstants.CONTROLLER_BUTTON.GearVRTouchClick)
    {
         //タッチパッド　クリック押し込み中
    }
    else if (button.button == EasyInputConstants.CONTROLLER_BUTTON.GearVRTrigger)
    {
         //トリガーボタン　押し込み中
　　　　　　　　}
}
```

##コントローラーセンサーパラメーター系
**名前空間**
`using EasyInputVR.Core;`

```c#:
void OnEnable()
{
   EasyInputHelper.On_Motion += localMotion;
   EasyInputHelper.On_ClickStart += localClickStart;
}
void localMotion (EasyInputVR.Core.Motion motion)
{
　　　　　　//加速度x軸
　　　　　　motion.currentVel.x
　　　　　　//加速度y軸
　　　　　　motion.currentVel.y
　　　　　　//加速度z軸
　　　　　　motion.currentVel.z
   //回転x軸
　　　　　　motion.totalAngularVelSinceLastReset.x
　　　　　//回転y軸
　　　　　　motion.totalAngularVelSinceLastReset.y
   //回転z軸
　　　　　　motion.totalAngularVelSinceLastReset.z
}

void localClickStart(ButtonClick button)
{
　　　　　　　　//トリガーボタンを押したらコントローラーの値をリセット
    if (button.button == EasyInputConstants.CONTROLLER_BUTTON.GearVRTrigger)
                EasyInputHelper.resetMotion();
}
```
上記以外にもパラメーターが存在するが、うまく動かなかったり、何のパラメーターかわからないのがあったので、省略します

#最後に
　インプット系やセンサー値系は全部デリゲートで登録できるのは便利！！
　機能の割にちょっとお値段お高い感じですね　半分ぐらいの値段が良さそう
　コントローラー以外にもHMDのセンサー値も取れるらしいけどサンプルを入れて見てもイマイチ取れているか微妙だったので記事には入れてないです