Edited at

OculusGoのデバック環境をmac上で動かす。

More than 1 year has passed since last update.

前回は玉転がしゲームをOculusGoに対応しました。

https://qiita.com/m0a/items/98cdc1e03cf067769578

その後、もくもく会でUnityアプリを作りました。

作ったゲームの動画はこちら

上記を作ってみてわかったことがあります。

デバックが辛い

Editor上でPlayしようとしても視点操作等が効ききません。

実機で動作確認すると変更するたびに数分待たされます。

そこでゲームパッドでOculsuGoのコントローラとヘッドトラッキングの代替を行うことにします。

アナログパッドに二軸コントローラが2つあればそれぞれをヘッドトラッキング、コントローラーのモーショントラッキングに代替できそうです。


準備

macだと使えるゲームパッドに限りがあるようです。PCだと問題ないと思いますが。

先ずはLOGICOOL ゲームパッド F310を入手します。秋葉原のヨドバシ2Fで、山ほど置いてあったので

入手性は容易なようです。

下記手順に従います。これでこのコントローラーがUnityで使えるようになります。

http://heyassy.hateblo.jp/entry/2017/10/08/113757

Xbox_360_Controllers.png

目標は上記のような感じにヘッドトラッキングとコントローラーのトラッキングに対応させます。


Unity上での作業


TLDR

以下にサンプルを含めたコードが置いてあります。そのまま動くと思います。

https://github.com/m0a/OculusGoOnMac


内容

変更したコードは

OVRCameraRig.csOVRTrackedRemote.cs のみです。

もし既存の環境に入れるのであれば上記2ファイルを置き換える感じで行けると思います。


OVRCameraRig.cs

ヘッドトラッキングとコントローラーのトラッキングをEditor利用時はダミーコードが動くように調整しています。

プラットフォーム依存コンパイルの機能を使い、実機には影響しないようにしています。

尚、以下のコード個所を修正することで挙動を変えることができます。


OVRCameraRig.cs

  // 頭の回転に合わせてコントローラも回転したい場合

dummyRightHandOrientation = dummyHead.orientation * RotXY(rotArmHorizonal * 10, rotArmVertical * 10);
// 頭の回転に影響しないようにしたい場合
//dummyRightHandOrientation = RotXY(rotArmHorizonal * 10, rotArmVertical * 10);



OVRTrackedRemote.cs

本来は実機コントローラーの接続状態を見て配下のコントローラーメッシュの有効化無効化を行う機能ですが、

Editor利用時は強制的にOculusGoコントローラー(右手)が有効化するように修正しています。

プラットフォーム依存コンパイルの機能を使い、実機には影響しないようにしています。


まとめ

こんなかんじで動けば成功です。

問題点としてはUnityの作法がわからないのでコード共有方法がこれでいいのかってことです。

もっといい方法があればご教授下さい。