Search code examples
user-interfaceunity-game-engineoculusvirtual-reality

OnGUI in VR not showing


I have included the following line to show a simple timer in the top left corner of a scene, which works of course, but when I tick the Virtual Reality Supported check-box and put on an Oculus Rift, it disappears.

void OnGUI()
{
    GUI.Label(new Rect(10, 10, 100, 20), Time.time.ToString());
}

What am I missing? What should I do additionally to resolve this?


Solution

  • OnGUI() does not work in VR. Instead use world space canvas UI.

    I did the following for the Gear-VR.

    Add a canvas (or other UI elements containing "Canvas" component) to your scene. Set render mode to World Space. This can be found on the render mode drop down list for the UI Canvas object:

    enter image description here

    I ended up going for an 800 x 600 canvas.

    For the timer itself I used Time.deltaTime.

    Here is my whole PlayerController script:

    void Start ()
    {
     timeLeft = 5;
     rb = GetComponent<Rigidbody>();
     count = 0;
     winText.text = "";
     SetCountText ();
    }
    
    void Update() {
     if (gameOver) {
        if (Input.GetMouseButtonDown(0)) {
            Application.LoadLevel(0);
        }
    } else {
        timeLeft -= Time.deltaTime;
        timerText.text = timeLeft.ToString("0.00");
        if (timeLeft < 0) {
            winner = false;
            GameOver(winner);
        }
     }
    }
    void GameOver(bool winner) {
     gameOver = true;
     timerText.text = "-- --";
     string tryAgainString = "Tap the touch pad to try again.";
     if (!winner) { // case A
        winText.text = "Time's up.\n" + tryAgainString;
     }
     if (winner) { // case B
        winText.text = "Well played!\n" + tryAgainString;
     }
    }
    
    void FixedUpdate ()
    {
     float moveHorizontal = Input.GetAxis ("Mouse X");
     float moveVertical = Input.GetAxis ("Mouse Y"); 
     Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);    
     rb.AddForce (movement * speed);
    }
    void OnTriggerEnter(Collider other) 
    {
     if (other.gameObject.CompareTag ( "Pick Up")){
        other.gameObject.SetActive (false);
        count = count + 1;
        SetCountText ();
        if (!gameOver) {
            timeLeft += 3;
        }
     }
    }   
    void SetCountText ()
    {
     if (!gameOver) {
        countText.text = "Count: " + count.ToString ();
     }
     if (count >= 12) {
        winner = true;
        GameOver(winner);
     }
    }