不能用Unity + Oculus Rift制作矩形显示

本文关键字:显示 Rift Unity Oculus 不能 | 更新日期: 2023-09-27 18:16:31

我试图在我的OVRPlayerController的相机前显示一个简单的矩形,但这似乎是不可能的。我认为这可能与矩形是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有关?

不能用Unity + Oculus Rift制作矩形显示

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

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

使用画布:

创建画布,然后添加UI,并在世界空间中设置画布。将画布作为VR Camera游戏对象的父对象,并将其缩小(默认为非常非常大)并旋转使其面向摄像机。

或者,使用3D:

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