123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using System;
- using System.IO;
- using System.Runtime.InteropServices;
- using UnityEngine;
- #if UNITY_XR_MANAGEMENT
- using UnityEngine.XR.Management;
- #endif
- namespace Unity.XR.OpenVR
- {
- #if UNITY_XR_MANAGEMENT
- [XRConfigurationData("OpenVR", "Unity.XR.OpenVR.Settings")]
- #endif
- [System.Serializable]
- public class OpenVRSettings : ScriptableObject
- {
- public enum StereoRenderingModes
- {
- MultiPass = 0,
- SinglePassInstanced
- }
- public enum InitializationTypes
- {
- Scene = 1,
- Overlay = 2,
- }
- public enum MirrorViewModes
- {
- None = 0,
- Left,
- Right,
- OpenVR,
- }
- [SerializeField, Tooltip("This will check the package version and the latest on github and prompt you to upgrade once per project load.")]
- public bool PromptToUpgradePackage = true;
- [SerializeField, Tooltip("This will check the package version and the latest on github and prompt you to upgrade once per project load.")]
- public bool PromptToUpgradePreviewPackages = true;
- [SerializeField, Tooltip("This allows developers to skip upgrade prompts for just this version.")]
- public string SkipPromptForVersion = null;
- [SerializeField, Tooltip("Set the Stereo Rendering Method")]
- public StereoRenderingModes StereoRenderingMode = StereoRenderingModes.SinglePassInstanced;
- [SerializeField, Tooltip("Most applications initialize as type Scene")]
- public InitializationTypes InitializationType = InitializationTypes.Scene;
- [SerializeField, Tooltip("A generated unique identifier for your application while in the editor")]
- public string EditorAppKey = null;
- [SerializeField, Tooltip("Internal value that tells the system what the relative path is to the manifest")]
- public string ActionManifestFileRelativeFilePath;
- [SerializeField, Tooltip("Which eye to use when rendering the headset view to the main window (none, left, right, or a composite of both + OpenVR overlays)")]
- public MirrorViewModes MirrorView = MirrorViewModes.Right;
- public const string StreamingAssetsFolderName = "SteamVR";
- public const string ActionManifestFileName = "legacy_manifest.json";
- public static string GetStreamingSteamVRPath(bool create = true)
- {
- string path = System.IO.Path.Combine(Application.streamingAssetsPath, StreamingAssetsFolderName);
- if (create)
- {
- CreateDirectory(new DirectoryInfo(path));
- }
- return path;
- }
- private static void CreateDirectory(DirectoryInfo directory)
- {
- if (directory.Parent.Exists == false)
- CreateDirectory(directory.Parent);
- if (directory.Exists == false)
- directory.Create();
- }
- [SerializeField, Tooltip("Internal value that tells the system if we have copied the default binding files yet.")]
- public bool HasCopiedDefaults = false;
- public ushort GetStereoRenderingMode()
- {
- return (ushort)StereoRenderingMode;
- }
- public ushort GetInitializationType()
- {
- return (ushort)InitializationType;
- }
- public MirrorViewModes GetMirrorViewMode()
- {
- return MirrorView;
- }
- /// <summary>
- /// Sets the mirror view mode (left, right, composite of both + openvr overlays) at runtime.
- /// </summary>
- /// <param name="newMode">left, right, composite of both + openvr overlays</param>
- public void SetMirrorViewMode(MirrorViewModes newMode)
- {
- MirrorView = newMode;
- SetMirrorViewMode((ushort)newMode);
- }
- public string GenerateEditorAppKey()
- {
- return string.Format("application.generated.unity.{0}.{1}.exe", CleanProductName(), ((int)(UnityEngine.Random.value * int.MaxValue)).ToString());
- }
- private static string CleanProductName()
- {
- string productName = Application.productName;
- if (string.IsNullOrEmpty(productName))
- productName = "unnamed_product";
- else
- {
- productName = System.Text.RegularExpressions.Regex.Replace(Application.productName, "[^\\w\\._]", "");
- productName = productName.ToLower();
- }
- return productName;
- }
- public static OpenVRSettings GetSettings(bool create = true)
- {
- OpenVRSettings settings = null;
- #if UNITY_EDITOR
- UnityEditor.EditorBuildSettings.TryGetConfigObject<OpenVRSettings>("Unity.XR.OpenVR.Settings", out settings);
- #else
- settings = OpenVRSettings.s_Settings;
- #endif
- if (settings == null && create)
- settings = OpenVRSettings.CreateInstance<OpenVRSettings>();
- return settings;
- }
- [DllImport("XRSDKOpenVR", CharSet = CharSet.Auto)]
- public static extern void SetMirrorViewMode(ushort mirrorViewMode);
- public bool InitializeActionManifestFileRelativeFilePath()
- {
- string oldPath = ActionManifestFileRelativeFilePath;
- string newPath;
- if (OpenVRHelpers.IsUsingSteamVRInput())
- {
- newPath = System.IO.Path.Combine(OpenVRSettings.GetStreamingSteamVRPath(false), OpenVRHelpers.GetActionManifestNameFromPlugin());
-
- string fullpath = System.IO.Path.GetFullPath(".");
- newPath = newPath.Remove(0, fullpath.Length + 1);
- if (newPath.StartsWith("Assets"))
- newPath = newPath.Remove(0, "Assets".Length + 1);
- }
- else
- {
- newPath = null;
- }
- #if UNITY_EDITOR
- if (newPath != oldPath)
- {
- ActionManifestFileRelativeFilePath = newPath;
- UnityEditor.EditorUtility.SetDirty(this);
- UnityEditor.AssetDatabase.SaveAssets();
- return true;
- }
- #endif
- return false;
- }
- #if UNITY_EDITOR
- public void Awake()
- {
- if (string.IsNullOrEmpty(this.EditorAppKey))
- {
- this.EditorAppKey = this.GenerateEditorAppKey();
- }
- this.InitializeActionManifestFileRelativeFilePath();
- }
- #else
- public static OpenVRSettings s_Settings;
- public void Awake()
- {
- s_Settings = this;
- }
- #endif
- }
- }
|