VRと書きましたが主にOculusの話です、すみません。
はじめに
Unityのシーン中にHierarchyとInspectorを表示できるRuntime Inspector & Hierarchyがデバッグに便利すぎる #OculusGoDev https://t.co/1eh6m20SLF pic.twitter.com/ypIwmxaUfJ
— Mitsuhiro Koga (@shiena) 2018年5月29日
こちらのツイートを見て、今開発中のゲームのデバッグ機能として追加してみたところ、ハマったポイントがあったので、同じような境遇の人がいたら助けになるといいなあというところです。
結論から言うとOculusから提供されているOVRRaycaster.csではGraphics.raycastTargetの判定をしていないようです。
uGUI操作の時なんかうまく動かないなと思ったら以下を試してみてください。
private void GraphicRaycast(Canvas canvas, Ray ray, List<RaycastHit> results) {
...
if (graphic.depth == -1)
continue;
...
}
上記のコードを以下のように修正します。
private void GraphicRaycast(Canvas canvas, Ray ray, List<RaycastHit> results) {
...
if (graphic.depth == -1 || !graphic.raycastTarget)
continue;
...
}
これでうまく動きました。
これより下はRuntimeInspectorの紹介とOculusGoでuGUIを操作するときの備忘録です。
メモ
今回使用したアセットはUnityRuntimeInspectorです。
https://github.com/yasirkula/UnityRuntimeInspector
こんな感じのヒエラルキ・インスペクタをゲームシーン上からプレビューできるようになります。
OculusGoにはRemoteContollerが付属しているので、こちらのコントローラからRaycastingを行い、uGUIのコントロールを行おうと目論みました。(今回はGazeInputは使用しませんでした)
調べてみるとOculus社がRayCastをマウスインプットのように変換するラッパーを提供されているようです。> OVRInputModule.cs、OVRRaycaster.cs
使用方法
- OVRInputModule.csをStandardInputModuleの代わりにEventSystemにアタッチ
- OVRRaycaster.csをGraphicRaycasterの代わりにCanvasにアタッチ
これだけで、RemoteContorollerからuGUIに対して入力を送ることができるようになりました、簡単ですね。