using UnityEngine; using Valve.VR; using System; public class Beamy : MonoBehaviour { private ulong overlayHandle = OpenVR.k_ulOverlayHandleInvalid; private void Start() { InitOpenVR(); overlayHandle = CreateOverlay("f3.beamy", "Beamy"); var filePath = Application.streamingAssetsPath + "/EYEna.png"; var error = OpenVR.Overlay.SetOverlayFromFile(overlayHandle, filePath); if (error != EVROverlayError.None) { throw new Exception("Failed to draw image file: " + error); } error = OpenVR.Overlay.ShowOverlay(overlayHandle); if (error != EVROverlayError.None) { throw new Exception("Failed to show overlay: " + error); } } private void OnApplicationQuit() { DestroyOverlay(overlayHandle); } private void OnDestroy() { ShutdownOpenVR(); } private void InitOpenVR() { if (OpenVR.System != null) return; var error = EVRInitError.None; OpenVR.Init(ref error, EVRApplicationType.VRApplication_Overlay); if (error != EVRInitError.None) { throw new Exception("Failed to initialize OpenVR: " + error); } } private void ShutdownOpenVR() { if (OpenVR.System != null) { OpenVR.Shutdown(); } } private ulong CreateOverlay(string key, string name) { var handle = OpenVR.k_ulOverlayHandleInvalid; var error = OpenVR.Overlay.CreateOverlay(key, name, ref handle); if (error != EVROverlayError.None) { throw new Exception("Failed to create overlay: " + error); } return handle; } private void DestroyOverlay(ulong handle) { if (handle != OpenVR.k_ulOverlayHandleInvalid) { var error = OpenVR.Overlay.DestroyOverlay(overlayHandle); if (error != EVROverlayError.None) { throw new Exception("Failed to dispose overlay: " + error); } } } }