Oculus と通常のモードを切り替えて遊べるようなものを考えていて、
PC 専用で考えているので多少の重さは気にしないので OnGUI を使って 2D 関係を描画していました。
これが Oculus になるとどうもうまくいく方法が見当たらないので調べてみました。
結果、自分では見つけられなかったのですが、VRGUI というものを教えていただきました。
・Unity GUI Package + Example
https://developer.oculusvr.com/forums/viewtopic.php?f=37&t=4944※ログインが必要です
中ぐらいに「VRGUI.zip」というリンクがあり、パッケージを落とすことができます。
これの使い方は簡単で、
// クラスを継承
public class ClassName : VRGUI {
こんな感じで「VRGUI」クラスを継承します。
「VRGUI」は「MonoBehaviour」を継承しているのであまり気にする必要はありません。
継承したものを作成したら「OnGUI」の代わりに
「OnVRGUI」という関数を作成します。この関数がないとエラーになります。
この「OnVRGUI」の中身は「OnGUI」と同じものでOKです。
// Oculus GUI 処理
public override void OnVRGUI()
{
// 描画
GUI.DrawTexture( new Rect(0,0,256,256),texture);
}
これで Oculus を使ったときにもちゃんと表示されるようになります。
こんな感じですね。

注意点としては「OVRCameraController」をシーンに配置しないといけないのと
そのカメラの位置が反映されるので気をつけてください(多分初期状態だとアップになりすぎている)
さて、これで Oculus を使ったときにはちゃんと表示できたのですが
普通に遊ぶときは普通に OnGUI で表示したいところです。
クラスは継承しているのでそこをうまく制御すれば切り替えることができます。
ということでこんな感じに。
// Oculus GUI 処理
public override void OnVRGUI()
{
// 描画を実行
this.RenderGUI();
}
// GUI 処理
public new void OnGUI()
{
// オキュラスの場合
if(IsOculus()){
// ベースを呼ぶ
base.OnGUI();
}
// Oculus 以外
else{
// 描画を実行
this.RenderGUI();
}
}
// 描画関数(1クッション置くため用)
private void RenderGUI()
{
// 描画
GUI.DrawTexture( new Rect(0,0,256,256),texture);
}
と、こんな感じに書くことで通常と Oculus 描画を切り替えることができます。
C# の記述方法が間違っていたらすみません…。
判定部分をいつでも切り替えられるようにしておけばこんな感じになります。

一応うまく行ったのですが、ちょっと歪んだ平面みたいになっているのが気になるのですよね…。
色々調べてみようかと思います。
ちなみにこれマウスカーソルも Oculus に対応してるのは便利ですね。
マウスオペレーションができるのではないかと。