123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- //======= Copyright (c) Valve Corporation, All rights reserved. ===============
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine.Serialization;
- namespace Valve.VR
- {
- public class SteamVR_Settings : ScriptableObject
- {
- private static SteamVR_Settings _instance;
- public static SteamVR_Settings instance
- {
- get
- {
- LoadInstance();
- return _instance;
- }
- }
- public bool pauseGameWhenDashboardVisible = true;
- public bool lockPhysicsUpdateRateToRenderFrequency = true;
- public ETrackingUniverseOrigin trackingSpace
- {
- get
- {
- return trackingSpaceOrigin;
- }
- set
- {
- trackingSpaceOrigin = value;
- if (SteamVR_Behaviour.isPlaying)
- SteamVR_Action_Pose.SetTrackingUniverseOrigin(trackingSpaceOrigin);
- }
- }
- [SerializeField]
- [FormerlySerializedAsAttribute("trackingSpace")]
- private ETrackingUniverseOrigin trackingSpaceOrigin = ETrackingUniverseOrigin.TrackingUniverseStanding;
- [Tooltip("Filename local to StreamingAssets/SteamVR/ folder")]
- public string actionsFilePath = "actions.json";
- [Tooltip("Path local to the directory the SteamVR folder as in")]
- public string steamVRInputPath = "SteamVR_Input";
- public SteamVR_UpdateModes inputUpdateMode = SteamVR_UpdateModes.OnUpdate;
- public SteamVR_UpdateModes poseUpdateMode = SteamVR_UpdateModes.OnPreCull;
- public bool activateFirstActionSetOnStart = true;
- [Tooltip("This is the app key the unity editor will use to identify your application. (can be \"steam.app.[appid]\" to persist bindings between editor steam)")]
- public string editorAppKey;
- [Tooltip("The SteamVR Plugin can automatically make sure VR is enabled in your player settings and if not, enable it.")]
- public bool autoEnableVR = true;
- [Space()]
- [Tooltip("This determines if we use legacy mixed reality mode (3rd controller/tracker device connected) or the new input system mode (pose / input source)")]
- public bool legacyMixedRealityCamera = true;
- [Tooltip("[NON-LEGACY] This is the pose action that will be used for positioning a mixed reality camera if connected")]
- public SteamVR_Action_Pose mixedRealityCameraPose = SteamVR_Input.GetPoseAction("ExternalCamera");
- [Tooltip("[NON-LEGACY] This is the input source to check on the pose for the mixed reality camera")]
- public SteamVR_Input_Sources mixedRealityCameraInputSource = SteamVR_Input_Sources.Camera;
- [Tooltip("[NON-LEGACY] Auto enable mixed reality action set if file exists")]
- public bool mixedRealityActionSetAutoEnable = true;
- [Tooltip("[EDITOR ONLY] The (left) prefab to be used for showing previews while posing hands")]
- public GameObject previewHandLeft;
- [Tooltip("[EDITOR ONLY] The (right) prefab to be used for showing previews while posing hands")]
- public GameObject previewHandRight;
- private const string previewLeftDefaultAssetName = "vr_glove_left_model_slim";
- private const string previewRightDefaultAssetName = "vr_glove_right_model_slim";
- public bool IsInputUpdateMode(SteamVR_UpdateModes tocheck)
- {
- return (inputUpdateMode & tocheck) == tocheck;
- }
- public bool IsPoseUpdateMode(SteamVR_UpdateModes tocheck)
- {
- return (poseUpdateMode & tocheck) == tocheck;
- }
- public static void VerifyScriptableObject()
- {
- LoadInstance();
- }
- private static void LoadInstance()
- {
- if (_instance == null)
- {
- _instance = Resources.Load<SteamVR_Settings>("SteamVR_Settings");
- if (_instance == null)
- {
- _instance = SteamVR_Settings.CreateInstance<SteamVR_Settings>();
- #if UNITY_EDITOR
- string localFolderPath = SteamVR.GetSteamVRResourcesFolderPath(true);
- string assetPath = System.IO.Path.Combine(localFolderPath, "SteamVR_Settings.asset");
- UnityEditor.AssetDatabase.CreateAsset(_instance, assetPath);
- UnityEditor.AssetDatabase.SaveAssets();
- #endif
- }
- SetDefaultsIfNeeded();
- }
- }
- public static void Save()
- {
- #if UNITY_EDITOR
- UnityEditor.EditorUtility.SetDirty(instance);
- UnityEditor.AssetDatabase.SaveAssets();
- #endif
- }
- private const string defaultSettingsAssetName = "SteamVR_Settings";
- private static void SetDefaultsIfNeeded()
- {
- if (string.IsNullOrEmpty(_instance.editorAppKey))
- {
- _instance.editorAppKey = SteamVR.GenerateAppKey();
- Debug.Log("<b>[SteamVR Setup]</b> Generated you an editor app key of: " + _instance.editorAppKey + ". This lets the editor tell SteamVR what project this is. Has no effect on builds. This can be changed in Assets/SteamVR/Resources/SteamVR_Settings");
- #if UNITY_EDITOR
- UnityEditor.EditorUtility.SetDirty(_instance);
- UnityEditor.AssetDatabase.SaveAssets();
- #endif
- }
- #if UNITY_EDITOR
- if (_instance.previewHandLeft == null)
- _instance.previewHandLeft = FindDefaultPreviewHand(previewLeftDefaultAssetName);
- if (_instance.previewHandRight == null)
- _instance.previewHandRight = FindDefaultPreviewHand(previewRightDefaultAssetName);
- #endif
- #if OPENVR_XR_API
- Unity.XR.OpenVR.OpenVRSettings settings = Unity.XR.OpenVR.OpenVRSettings.GetSettings();
- settings.ActionManifestFileRelativeFilePath = SteamVR_Input.GetActionsFilePath();
- #if UNITY_EDITOR
- settings.EditorAppKey = _instance.editorAppKey;
- #endif
- #endif
- }
- private static GameObject FindDefaultPreviewHand(string assetName)
- {
- #if UNITY_EDITOR
- string[] defaultPaths = UnityEditor.AssetDatabase.FindAssets(string.Format("t:Prefab {0}", assetName));
- if (defaultPaths != null && defaultPaths.Length > 0)
- {
- string defaultGUID = defaultPaths[0];
- string defaultPath = UnityEditor.AssetDatabase.GUIDToAssetPath(defaultGUID);
- GameObject defaultAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(defaultPath);
- if (defaultAsset == null)
- Debug.LogError("[SteamVR] Could not load default hand preview prefab: " + assetName + ". Found path: " + defaultPath);
- return defaultAsset;
- }
- //else //todo: this will generally fail on the first try but will try again before its an issue.
- //Debug.LogError("[SteamVR] Could not load default hand preview prefab: " + assetName);
- #endif
- return null;
- }
- }
- }
|