Skip to main content
Participant
July 15, 2016
Solved

The Mysterious Volume UI

  • July 15, 2016
  • 32 replies
  • 12989 views
I'm trying to get my Unity app ready for submission. I'm using Unity version 5.3.5p5 and Oculus Utilities for Unity 5 V1.5.0. I've gotten the needed back button functionality working, but for the life of me I can't figure out the required volume UI. In the utilities, there's a VolumeController prefab under Moonlight that's missing a script, though I thought I've read other things are supposed to be supplying the Volume UI (OVRManager?). Nothing has worked so far. I even tried the Oculus Sample Framework for Unity 5 Project Oculus provides, but that doesn't have the volume UI working in it either. So I don't even have a working version to work back from.

Does anyone have any idea how to get the Volume UI working in 1.5.0? All the help online I've been able to find seems to refer to earlier version of the Oculus utilities and scripts that no longer exist.
    This topic has been closed for replies.
    Best answer by ProfessorTroy
    Alright!

    So the newest Unity package is missing the OVRVolumeControl.

    Here is a version that "works" with the current package. It won't show the volume bar if you're already at max/min values, because the event that the button was hit appears to be missing so you can't key off it here.

    I added the LastVolumeInput, TempVolumeInput and TimeToCheck values so it tracks when the volume has changed. There was some minor changes made to the Update function as well.

    Add this behavior to the prefab with the missing script.
    Add that prefab to your camera.
    Position it where you want it to appear in the users vision.
    Blamo - it'll work.


    Cheers!

    using UnityEngine;
    using System.Collections;

    public class OVRVolumeControl : MonoBehaviour
    {
        private const float         showPopupTime = 3;
        private const float            popupOffsetY = 64.0f / 500.0f;
        private const float            popupDepth = 1.8f;
        private const int             maxVolume = 15;
        private const int             numVolumeImages = maxVolume + 1;
        
        private Transform            myTransform = null;

        private float LastVolumeInput;
        private float TempVolumeInput;
        private float TimeToCheck = 0.0f;
        
        void Start()
        {
            DontDestroyOnLoad( gameObject );
            myTransform = transform;
            GetComponent<Renderer>().enabled = false;
            LastVolumeInput = OVRManager.volumeLevel;
        }

        void Update()
        {
            UpdatePosition(Camera.main.transform);
        }

        /// <summary>
        /// Updates the position of the volume popup. 
        /// </summary>
        public void UpdatePosition(Transform cameraTransform)
        {
            // OVRManager.volumeLevel returns a negative value in GearVR/Unity until the button is hit at least once.
            
            float check = OVRManager.volumeLevel;
            if ((check < 0f) || (check == LastVolumeInput))  // we haven't gotten a volume button check yet.
            {
                TimeToCheck = 0f;
            }
            else
            {
                LastVolumeInput = -10; // there was a change, let this play out.
                if (TempVolumeInput != check)
                    TimeToCheck = 0.0f;

                TempVolumeInput = check;
                // Volume has changed...
                TimeToCheck += Time.deltaTime;

                if ((TimeToCheck < showPopupTime)) // for the next three seconds ....
                {
                    GetComponent<Renderer>().enabled = true;
                    GetComponent<Renderer>().material.mainTextureOffset = new Vector2(0.0f, (float)(maxVolume - (OVRManager.volumeLevel*maxVolume) ) / (float)numVolumeImages);
                    if (myTransform != null && cameraTransform != null)
                    {
                        // place in front of camera
                        myTransform.rotation = cameraTransform.rotation;
                        myTransform.position = cameraTransform.position + (myTransform.forward * popupDepth) + (myTransform.up * popupOffsetY);
                    }
                }
                else
                {
                    // 3 seconds have passed...
                    TimeToCheck = 0.0f;
                    LastVolumeInput = check;
                    GetComponent<Renderer>().enabled = false;
                }
            }
        }
    }

    32 replies

    Inspiring
    August 10, 2016
    > There are no Oculus Utilities 1.4 for Unity. There exist only version 1.3.x, 1.5.x and 1.6.x

    Use 1.3.2.
    Up and Coming
    August 18, 2016
    It works for me after upgrading!
    I just upgraded to Unity 5.4.0f3 and volume UI just works in GearVR. I was on 5.4.0b13 when it was not working. I do not have Oculus Utilities installed. I have Oculus Platform installed but pretty sure that has nothing to do with this. I don't see any performance issues/judder. Just letting y'all know!