「Unity + Oculus Rift – File BrowserのAssetをVRで使う。-」で機能的にはほぼ完成したのだが、頭の向きで指示するGaze Pointerは手で対象を指示するのと比べるとけっこう疲れる。
操作中に選択対象のObject以外の他のものを目で追うことも不可能だ。
まあ、Gaze方式に不慣れなせいもあるのかもしれないが、現状では手に紐付けてもらった方が何かと都合がいい。
出来ればよくあるTuchの先から出るLaser Pointerの方式にしたいなあと思って色々調べた。
調べて色々試したが思うように実装出来ないでいた。
とりあえず、Laserの発射元であるコントローラーのTouchをVR内に表示させる設定でもやっておこう。
Oculus>VR>Prefub>OVRControllerPrefub を
OVRCameraRig>TrackingSpace>LeftHandAnchor と
OVRCameraRig>TrackingSpace>RightHandAnchor へドロップする。
これだけで、左右のTouchが表示され、実際のTouchの位置に合わせて位置も向きも反映されるようになる。
Touchの表示完了。
肝心のLaserは下のサイトを参考にコントローラーから発射させることは出来るようになった。
http://rikoubou.hatenablog.com/entry/2018/06/04/193607
だが、Laserの照射先のObjectのButtonとかをクリックさせる処理のScriptが理解できない。
ここまで来て思いついたことがある。
OVRGazePointerのRay TransformをCenterEyeAnchorに設定してあるから頭の向いた方向にGazePointerが表示される。
ならば、CenterEyeAnchorからLeftControllerAnchorに変えれば左のTouchの向いた先にGazePointerが出るんじゃないの?
これで、確かに視線の方向(画面中央)でなく左のTouchを向けたところ(画面右上)にGazPointerを出せるようになった。
さらに、同様にEventSystem>OVRInputModuleのRayTransformもCenterEyeAnchorからLeftControllerAnchorに変えて、無事対象を選択・クリック出来るようになった。
他にもEventSystemを持っているObjectがあればそこでも同様に変更する。
私の場合で言えばSimpleFileBrowserCanvasの下にもEventSystemがあった。
Hierarchy直下のEventSystemとSimpleFileBrowserCanvas>EventSystemの2つでOVRInputModuleのRayTransformをCenterEyeAnchorからLeftControllerAnchorに変えた。
Laserは実装できていないが、首の疲れは解消された。
分かりにくいかもしれないが、上の動画でスクロールバーは上下しているのに映像は上下しない。
動かしているのは左手で、頭は動いてないからだ。
これがもし設定を変更する前のGazePointerなら映像自体が上下する。
「Unity + Oculus Rift – TouchからGaze Pointerまで線を引けばLaser気分。 –」へ続く。
Tweet