(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Oculus Integrationで取得出来るOculus Goの主要な入力【Unity】【VR】【アセット】【Oculus Go】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2017.4.4f1


はじめに

前にUnity製アプリをOculus Goで動かすという記事を書きました。



この時は見るだけで操作は一切出来なかったので、

今回はコントローラの入力を受け取ってみよう!という感じの記事です!


なお、移動やコントローラの表示&同期の実装方法については別の記事にしました。





Oculus Integration

今回はOculus IntegrationというOculus公式から出ている無料のアセットを使います。

これは楽にOculus Go周りの実装が出来るという優れモノです!



ちなみにOculus Go以外にも、Oculus RiftやTouch、Gear VRにも対応してるらしいです。


入力

Oculus Goで取得出来る入力はドキュメントの画像が分かりやすいです。


f:id:kan_kikuchi:20180610052404p:plain


また、GearVrContrllerTestというシーンを

Oculus Goの実機で見ると実際に入力を受け取っている様子が確認出来ます。


f:id:kan_kikuchi:20180609121757j:plain


画像だとちょっと分かりにくいかもしれませんが、

コントローラの操作に合わせて目の前に表示されている値が変化するサンプルです。

ちなみにサンプルで入力を処理して、

UIに値を表示しているクラスはOVRGearVrControllerTestです。


f:id:kan_kikuchi:20180609121805j:plain


実際に入力を取得するプログラムは以下のような感じになります。

(Oculus Goで取得出来る主要なものだけ)

/*------------------------タッチパッド(正面の丸い所)------------------------*/

//タッチパッドを押しているか(Get)、押した瞬間(GetDown)か、押して離した瞬間(GetUp)か
//OVRInput.Button.PrimaryTouchpad、OVRInput.RawButton.Startでも取得可能
if(OVRInput.Get     (OVRInput.Button.One)){}
if(OVRInput.GetDown (OVRInput.Button.One)){}
if(OVRInput.GetUp   (OVRInput.Button.One)){}

//タッチパッドを触っているか(Get)、触った瞬間(GetDown)か、触って離した瞬間(GetUp)か
//OVRInput.Touch.PrimaryTouchpadでも取得可能
if(OVRInput.Get     (OVRInput.Touch.One)){}
if(OVRInput.GetDown (OVRInput.Touch.One)){}
if(OVRInput.GetUp   (OVRInput.Touch.One)){}

//タッチパッドを触っている所の座標(-1 ~ 1)
Vector2 primaryTouchpad = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);

//タッチパッド上でスワイプしたか(上下左右)
if(OVRInput.Get(OVRInput.Button.Up)){}
if(OVRInput.Get(OVRInput.Button.Down)){}
if(OVRInput.Get(OVRInput.Button.Left)){}
if(OVRInput.Get(OVRInput.Button.Right)){}

/*------------------------トリガー(後ろの引くボタン)------------------------*/

//トリガーを引いたか(Get)、引いた瞬間(GetDown)か、引いた離した瞬間(GetUp)か
//OVRInput.RawButton.Aでも取得可能
if(OVRInput.Get     (OVRInput.Button.PrimaryIndexTrigger)){}
if(OVRInput.GetDown (OVRInput.Button.PrimaryIndexTrigger)){}
if(OVRInput.GetUp   (OVRInput.Button.PrimaryIndexTrigger)){}

/*------------------------バック(←マーク)------------------------*/

//バックを押しているか(Get)、押した瞬間(GetDown)か、押して離した瞬間(GetUp)か
//OVRInput.Button.Back、OVRInput.RawButton.Backでも取得可能
if(OVRInput.Get     (OVRInput.Button.Two)){}
if(OVRInput.GetDown (OVRInput.Button.Two)){}
if(OVRInput.GetUp   (OVRInput.Button.Two)){}

/*------------------------Reservedボタン(Oculusマーク)------------------------*/

//センターがリセットされたか(Reservedボタンを長押した時、ホームに行ってからアプリに戻ってきた時)
if(OVRInput.GetControllerWasRecentered()){}

/*------------------------コントローラそのものの入力------------------------*/

//アクティブな(使っている)コントローラ
OVRInput.Controller activeController = OVRInput.GetActiveController();

//アクティブな(使っている)コントローラ名
//右利きでコントローラが繋がっている時はRTrackedRemote、左利きはLTrackedRemote、繋がっていない時はNone
string activeControllerName = activeController.ToString()

//繋がっているコントローラの全ての名前?(Oculus Goは一つしか繋げないのでアクティブなコントローラと同じ)
string connectedControllerNames = OVRInput.GetConnectedControllers().ToString();

//コントローラの回転(現在の角度)
Quaternion rot = OVRInput.GetLocalControllerRotation(activeController);

//コントローラの回転速度、加速度
Vector3 angVel = OVRInput.GetLocalControllerAngularVelocity(activeController);
Vector3 angAcc = OVRInput.GetLocalControllerAngularAcceleration(activeController);

//コントローラの座標(自分の環境だとあまり精度はよくない)
Vector3 pos = OVRInput.GetLocalControllerPosition(activeController);

//コントローラの移動速度(自分の環境だと取得出来ない)、加速度
Vector3 vel = OVRInput.GetLocalControllerVelocity(activeController);
Vector3 acc = OVRInput.GetLocalControllerAcceleration(activeController);

/*------------------------その他------------------------*/

//コントローラの残りバッテリー
byte battery = OVRInput.GetControllerBatteryPercentRemaining();

//フレームレート(FPS)
float framerate = OVRPlugin.GetAppFramerate();

//Reservedボタンを長押しして、センターをリセットした回数
byte recenterCount = OVRInput.GetControllerRecenterCount();



おわりに

今回は入力だけでしたが、ストアの説明文によると

オーディオ関係やアバター、通信周り等の手助けもしてくれるっぽいです。


機会があれば、そのあたりも記事にするかもしれません。