/// <summary>
        /// Change the observed volume according to ObserverVolumeType.
        /// </summary>
        private void SwitchObservedVolume()
        {
            if (observer == null)
            {
                return;
            }

            switch (observerVolumeType)
            {
            case ObserverVolumeTypes.AxisAlignedBox:
                observer.SetVolumeAsAxisAlignedBox(origin, extents);
                break;

            case ObserverVolumeTypes.OrientedBox:
                observer.SetVolumeAsOrientedBox(origin, extents, orientation);
                break;

            case ObserverVolumeTypes.Sphere:
                observer.SetVolumeAsSphere(origin, extents.magnitude);     //workaround
                break;

            default:
                observer.SetVolumeAsAxisAlignedBox(origin, extents);
                break;
            }
        }
        /// <summary>
        /// Can be called to override the default origin for the observed volume.  Can only be called while observer has been started.
        /// </summary>
        public bool SetObserverOrigin(Vector3 origin)
        {
            bool originUpdated = false;

            if (observer != null)
            {
                observer.SetVolumeAsAxisAlignedBox(origin, Extents);
                originUpdated = true;
            }

            return(originUpdated);
        }
        /// <summary>
        /// Starts the Surface Observer.
        /// </summary>
        public void StartObserving()
        {
            if (observer == null)
            {
                observer = new UnityEngine.VR.WSA.SurfaceObserver();
                observer.SetVolumeAsAxisAlignedBox(Vector3.zero, Extents);
            }

            if (ObserverState != ObserverStates.Running)
            {
                Debug.Log("Starting the observer.");
                ObserverState = ObserverStates.Running;

                // We want the first update immediately.
                updateTime = 0;
            }
        }