2019年6月22日土曜日

[Oculus Quest 開発] Oculus Integration に含まれるLaserPointerについて。

お疲れ様です。ZuQ9->Nnです。

2019年6月のはじめくらいに
Oculus Quest を購入しました。
折角、購入したので、開発しないと勿体ないとおもったため
ゆるゆると開発を始めていました。

どうしても、さぼるだろうなと感じていたために
2019年6月1日(土)に開催された
【しなもく会特別版】Quest開発もくもく会 等にも参加してしていました。

【しなもく会特別版】Quest開発もくもく会 (2019/06/01 14:00〜)

VR開発に詳しいSynamonのUnityエンジニアと、一緒にQuest開発をもくもくできる会 「開発とか作業をしたいけど、自分の部屋だとやる気がでなくて...」 「Questが届いたのでさっそくみんなでワイワイやりながら開発したい!」 「AndroidベースのVR開発に関する新しい知見が欲しい...」 「VR転職に興味ある!けど知り合い全然いない...知り合い欲しい...」 ...
実は、以前に少しだけ、業務でOculus Goのアプリを開発したときに
UIを操作するときにLaserPointerを表示しているサンプルがあったなぁと
かすかな記憶に残っていました。

ググってみると。いくつかLaserPointerを表示する技術記事が見つかりました。
これらの技術記事の中では、LaserPointerのSriptを自作しています。
しかし、2019年6月のOculus Integrationの中 Assets > Oculus > SampleFramework > Core > Scriptsに LaserPointer.csというScriptが含まれていました。なので、わざわざ自作必要は無いのでは? というモヤモヤが自分の中に生まれてきました。

すでに、こちらのQiita記事 に記述されているんですが。

Oculus QuestでuGUIを操作する - Qiita

はじめに 基本的にはOculusGoなどと同じですが、少し情報が古くなっているので、2019.06時点での情報を記して置きます。 Oculus Go 開発メモ - uGUI編 - Qiita https://qiita.com...
Oculus Integration に含まれるLaserPointerは、
Assets > Oculus > SampleFramework > Core > Prefabsの中の
UIHelpersのPrafabにまとめられています。


UIHelpersのPrafabは
  • LaserPointer
  • Shpere
  • EventSyste
の3つのGameObjectで構成されています。
それぞれ、細かく内容を見てみましょう
LaserPointerのGameObjectは、LaserPointer.csのScriptと
Line Renderがアタッチされています。

ShpereのGameObjectは3DオブジェクトのShpereが
Scale x 0.01 y 0.01 z 0.01となっています

 EventSystemのGameObjectはUnityのEventSystemと
OVRInputModule.csのスクリプトがアタッチされており、
CursorのプロパティにLaserPointerがアタッチされています。

また、UIHelpersそのものには、HandedInputSelector.csのScriptがアタッチされています。

HandedInputSelector.csの中身は、OVRInput.GetActiveController()で
アクティブなコントローラーを取得し、OVRInputModuleのrayTransformを右か左のHandAnchorにセットしています。

実際にLaserPointerを利用しているサンプルは、
Assets > Oculus > SampleFramework > Usage > DebugUI.unityのSceneが参考になります。

DebugUIのHierarchy、CanvasWithDebugにDebuUIBuilder.csの
UI Helper To InstantiateのプロパティにUIHelpersのPrefabがアタッチされています。
また、Laser Beam BehaviorをONに変更することで
常にLaserPointerを表示し続けることが可能です。


本当は、VRChatのアプリのように両方のコントローラーから
LaserPointerを表示してUI操作をおこないたったのですが、
色々、自分で独自Scriptを記述したり試してはみたのですがうまくいきませんでした。orz..

まぁ、今後も、こんな感じでゆるりと Oculus Quest 開発は続けていきたい。