前回は玉転がしゲームを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
目標は上記のような感じにヘッドトラッキングとコントローラーのトラッキングに対応させます。
Unity上での作業
TLDR
以下にサンプルを含めたコードが置いてあります。そのまま動くと思います。
https://github.com/m0a/OculusGoOnMac
内容
変更したコードは
OVRCameraRig.cs
とOVRTrackedRemote.cs
のみです。
もし既存の環境に入れるのであれば上記2ファイルを置き換える感じで行けると思います。
OVRCameraRig.cs
ヘッドトラッキングとコントローラーのトラッキングをEditor利用時はダミーコードが動くように調整しています。
プラットフォーム依存コンパイル
の機能を使い、実機には影響しないようにしています。
尚、以下のコード個所を修正することで挙動を変えることができます。
// 頭の回転に合わせてコントローラも回転したい場合
dummyRightHandOrientation = dummyHead.orientation * RotXY(rotArmHorizonal * 10, rotArmVertical * 10);
// 頭の回転に影響しないようにしたい場合
//dummyRightHandOrientation = RotXY(rotArmHorizonal * 10, rotArmVertical * 10);
OVRTrackedRemote.cs
本来は実機コントローラーの接続状態を見て配下のコントローラーメッシュの有効化無効化を行う機能ですが、
Editor利用時は強制的にOculusGoコントローラー(右手)が有効化するように修正しています。
プラットフォーム依存コンパイル
の機能を使い、実機には影響しないようにしています。
まとめ
こんなかんじで動けば成功です。
macでのOculusGo開発環境できました。頭の動きに追従してコントローラも回転させてもいいかもしれませんけど、そこは好みかなと。#OculusGoDev pic.twitter.com/dHRD3XHPN1
— m0a (@abe00makoto) 2018年5月21日
問題点としてはUnityの作法がわからないのでコード共有方法がこれでいいのかってことです。
もっといい方法があればご教授下さい。