无法制作矩形以使用 Unity + Oculus Rift 显示

Cannot make a Rectangle to display with Unity + Oculus Rift

我试图在我的 OVRPlayerController 的摄像头前面显示一个简单的矩形,但这似乎是不可能的。 我认为这可能与 Rect 是 2D 而我的环境是 3D 这一事实有关。这有意义吗?

代码如下(我省略了不必要的东西):

static  int MAX_MENU_OPTIONS = 3;
public  GameObject Menu;
private bool showMenu = false;
private float menuIndex = 0;
private bool hasPressedDirectionalPad = false;
public  Transform[] buttons = new Transform[MAX_MENU_OPTIONS];
private static Texture2D staticRectTexture;
private static GUIStyle staticRectStyle;



bool DpadIsPressed() {
    if (!hasPressedDirectionalPad && Input.GetAxis("DpadY") != 0 && hasPressedDirectionalPad == false){
        menuIndex += Mathf.Sign(Input.GetAxis("DpadY")) * (-1);
        if (menuIndex < 0) menuIndex = 0;
        else if (menuIndex > MAX_MENU_OPTIONS-1) menuIndex = MAX_MENU_OPTIONS-1;
        hasPressedDirectionalPad = true;
    }
    if(Input.GetAxis("DpadY") == 0){
        hasPressedDirectionalPad = false;
    }
    return hasPressedDirectionalPad;
}

void Start() {
    Menu.SetActive(false);
    staticRectTexture = new Texture2D(1, 1, TextureFormat.RGB24, true);
    staticRectStyle = new GUIStyle();
}

void Update() {
    if (Input.GetButtonDown("A")) {
        DoAction ();
        print ("A key was pressed");
    }
    if (Input.GetButtonDown("Options")) {
        showMenu = !showMenu;
        if (showMenu) {
            Time.timeScale = 0;
            menuIndex = 0;
            Menu.transform.rotation = this.transform.rotation;
            Menu.transform.position = this.transform.position;
        } else
            Time.timeScale = 1;
    }
    if (DpadIsPressed ()) {

        print ("Dpad key was pressed and menuIndex = " + menuIndex);
    }
    if (showMenu) {
        Menu.SetActive (true);
    }
    if (!showMenu) {
        Menu.SetActive (false);
    }

}

void OnGUI() {
    if (showMenu) {
        Vector3 offset = new Vector3(0, 0, 0.2f);
        Vector3 posSelectRectangle = buttons[(int)menuIndex].transform.position + offset;
        Rect selectionRectangle = new Rect(posSelectRectangle.x - (float)177/2,
                                           posSelectRectangle.y - (float)43/2,
                                           177.0f, 43.0f);
        GUIDrawRect(selectionRectangle, new Color(255.0f, 0, 0));
    }
}


void DoAction () {
    if (menuIndex == 0)
        Salir ();
    /*else if (menuIndex == 1)
        Guardar ();*/
    else if (menuIndex == 2)
        Salir ();
}

public static void GUIDrawRect(Rect position, Color color ) {
    staticRectTexture.SetPixel( 0, 0, color );
    staticRectTexture.Apply();

    staticRectStyle.normal.background = staticRectTexture;
    GUI.Box( position, GUIContent.none, staticRectStyle );
}

访问了函数,但是没有显示矩形。你看到错误了吗?可能跟 Oculus Rift 有关系?

OnGUI 和 Screen-space Canvas 不支持 VR 模式。这是因为没有办法处理立体渲染。 (注意:尽管它们会在用户的 PC 上重复显示)。

如果您想在用户的摄像头前进行渲染(如 HUD),您可以:

使用 Canvas:

创建一个canvas,然后添加你的UI,并在world-space中设置canvas。将 canvas 设为 VR Camera 游戏对象的父级,并将其缩小(默认为非常大)并旋转它使其面向相机。

或者,使用 3D:

创建一个 3d 对象(平面、立方体、四边形等等!)并将其作为您的 VR 相机的父级。您可以使用标准的 3d 技术来更新它的纹理或渲染纹理。