OVRPlayerControllerには元々レティクル表示機能(OVRCrossHair)がありますが、
表示に使用している2次元座標(OVRCrossHairのXL,YL)が使いにくかったり、
3次元座標にしようとすると色々おかしくなったり、
マウス位置と完全に連動していなかったりで、
ストレスMAXになったので自作…という経緯
レティクル表示に必要なもの
とりあえず、必要なものを洗い出し
- マウスのスクリーン座標
- OVRで使用しているCamera型のインスタンス(3次元座標への変換用)
- ビルボード表示(http://andorelseif.com/Neareal/index.php?ComputerGraphics%2FUnity%2FTips%2FSimpleBillboard)
マウスのスクリーン座標取得とビルボード表示については
解説サイトが山ほどあるので、2番めのカメラの取得について説明というかメモ
OVRでのカメラ取得方法
ステレオカメラなどで色々と面倒かと思いきや、案外簡単。
OVRCrossHairを見てみると、↓のコードでカメラを取得している様に見える
CameraController.GetCamera (ref MainCam);
CameraController.GetCameraの中身を見てみると、
public void GetCamera(ref Camera camera)
{
camera = CameraRight;
}
…え、右側のカメラを使っているだけ?
補間などの面倒な処理をしているかと思っていたので拍子抜け
で、色々してこんな感じでできました
- マウスのスクリーン座標を取得
- 以前の記事で書いた方法で、マウスカーソルの3次元座標を計算
- 計算した3次元座標にビルボード表示
詰まった所メモ
- GUITextureでレティクル表示しようとしたのですが、ステレオカメラ+OculusRift表示用の歪み補正などが重なっているせいか、なかなか上手くいかなかったので却下
- Screenを用いた情報はあまり使用しない方がいい?
- Plane+ビルボード表示を使用。デプステストへの対応が今後必要になると予想
- Screenを用いた情報はあまり使用しない方がいい?