Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

Unity + Oculus Rift – TouchからGaze Pointerまで線を引けばLaser気分。 –

Unity + Oculus Rift – Gaze Pointer は首が疲れる。 –」で、HMDに紐付いてるGazePointerをTouchに紐付ければLaser Pointerによる対象の選択と遜色ないとわかって実装した。

でまた気づいたのは、んじゃあそのTouchからGazePointerまで線を引けば、あたかもLaserでポイントする先にポインターがある例の奴と同じことじゃんってこと。
基本的にこのサイト
http://rikoubou.hatenablog.com/entry/2018/06/04/193607
の「4:Oculus Goコントローラーからレーザーポインターを出す」を参考にさせていただいた。

上で提供されているLaserPointer.csをProjectに保存しようとするとOculus Integrationの中にも同名のスクリプトがあると叱られたのでLaserPointerNew.csという名前にして作った。
Unityやり始めのころさんざん悩んだなあ、下のように名前はそろえないといけないらしい。

あと、参考にさせていただいたサイトはOculus Goを対象にしているのでOVRInput.Controller.RTrackedRemote、OVRInput.Controller.LTrackedRemoteとなっている。
Touchではこの部分をOVRInput.Controller.RTouch、OVRInput.Controller.LTouchに書き換える。
https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovrinput/#touch-input-mapping
ただ、私の場合は右のTouch限定にしたので以下のようにした。


残る課題は2つ。
1.対象を指示していないときでもLaserが出たまま。
2.Pointerをもう少し小さく。

1. OVRGazePointer.cs内にGaze Pointerを描いたり消したりする部分がある。
 そこにLaserPointerのActiveのtrue、falseも追加する。
 まず先頭に以下を追加する。
 これはLaserPointerというGameObjectを探し出して
 laserlineという変数に記憶させておくためのコードだ。

 元からあるHide()とShow()に以下を追加する。
 記憶させておいたGameObjectをActiveにしたりActiveでなくしたりする。

 ちなみに、GameObject.Findはその度にやると重くなるから
 最初に1回だけやるようにするのがいいらしい。

2. これは簡単。
 GazePointer>GazeIconのTransformでScaleが3.548645だったのを
 すべて1にした。


追記(2020/01/11)
新たな課題、というか不明点
 右のTouchのABにある機能R、左のTouchのXYに別のある機能Lを割り当てたとする。
 右のTouchを手から離して置くと、左のTouchのXYが機能LでなくABに割り当てたはずの機能Rを持つ。
 当座機能Rが不要で持ってても仕方ないから右のTouchを置いたんだけど…。

このエントリーをはてなブックマークに追加

Posted under: Unity, VR


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.