#if UNITY_EDITOR namespace VRTK.Examples.Utilities { using UnityEngine; using UnityEditor; [ExecuteInEditMode] public class VRTKExample_FixSetup : MonoBehaviour { public bool forceOculusFloorLevel = true; protected bool trackingLevelFloor = false; public virtual void ApplyFixes() { FixOculus(); } protected virtual void Awake() { if (Application.isEditor && !Application.isPlaying) { ApplyFixes(); } } protected virtual void Update() { FixTrackingType(); } protected virtual void FixTrackingType() { #if VRTK_DEFINE_SDK_OCULUS if (forceOculusFloorLevel && !trackingLevelFloor) { GameObject overManagerGO = GameObject.Find("[VRTK_SDKManager]/[VRTK_SDKSetups]/Oculus/OVRCameraRig"); if (overManagerGO != null) { OVRManager ovrManager = overManagerGO.GetComponent(); if (ovrManager != null) { ovrManager.trackingOriginType = OVRManager.TrackingOrigin.FloorLevel; trackingLevelFloor = true; Debug.Log("Forced Oculus Tracking to Floor Level"); } } } #endif } protected virtual void FixOculus() { #if VRTK_DEFINE_SDK_OCULUS string oculusPath = "[VRTK_SDKManager]/[VRTK_SDKSetups]/Oculus"; GameObject oculusSDK = GameObject.Find(oculusPath); /* if (oculusSDK == null || oculusSDK.GetComponentInChildren() != null) { Debug.Log("No Oculus Repaired Required"); return; } */ GameObject currentRig = GameObject.Find(oculusPath + "/OVRCameraRig"); GameObject currentAvatar = GameObject.Find(oculusPath + "/LocalAvatar"); VRTK_SDKSetup oculusSetup = oculusSDK.GetComponent(); if (currentRig != null) { DestroyImmediate(currentRig); } if (currentAvatar != null) { DestroyImmediate(currentAvatar); } GameObject ovrCameraRig = null; GameObject ovrCameraRigToInstantiate = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/Oculus/VR/Prefabs/OVRCameraRig.prefab", typeof(GameObject)); if (ovrCameraRigToInstantiate != null) { ovrCameraRig = Instantiate(ovrCameraRigToInstantiate) as GameObject; } if (ovrCameraRig != null) { ovrCameraRig.name = ovrCameraRig.name.Replace("(Clone)", ""); ovrCameraRig.transform.SetParent(oculusSDK.transform); ovrCameraRig.SetActive(true); oculusSetup.actualBoundaries = ovrCameraRig; oculusSetup.actualHeadset = GameObject.Find(oculusPath + "/OVRCameraRig/TrackingSpace/CenterEyeAnchor"); oculusSetup.actualLeftController = GameObject.Find(oculusPath + "/OVRCameraRig/TrackingSpace/LeftHandAnchor"); oculusSetup.actualRightController = GameObject.Find(oculusPath + "/OVRCameraRig/TrackingSpace/RightHandAnchor"); Debug.Log("Successfully repaired Oculus OVRCameraRig prefab"); } GameObject ovrAvatar = null; GameObject ovrAvatarToInstantiate = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/Oculus/Avatar/Content/Prefabs/LocalAvatar.prefab", typeof(GameObject)); if (ovrAvatarToInstantiate != null) { ovrAvatar = Instantiate(ovrAvatarToInstantiate) as GameObject; } if (ovrAvatar == null) { //legacy location ovrAvatarToInstantiate = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/OvrAvatar/Content/Prefabs/LocalAvatar.prefab", typeof(GameObject)); if (ovrAvatarToInstantiate != null) { ovrAvatar = Instantiate(ovrAvatarToInstantiate) as GameObject; } } if (ovrAvatar != null) { OvrAvatar avatarScript = ovrAvatar.GetComponent(); avatarScript.StartWithControllers = true; ovrAvatar.name = ovrAvatar.name.Replace("(Clone)", ""); ovrAvatar.transform.SetParent(oculusSDK.transform); ovrAvatar.SetActive(true); oculusSetup.modelAliasLeftController = GameObject.Find(oculusPath + "/LocalAvatar/controller_left"); oculusSetup.modelAliasRightController = GameObject.Find(oculusPath + "/LocalAvatar/controller_right"); //GameObject.Find(oculusPath + "/LocalAvatar/hand_left").SetActive(false); //GameObject.Find(oculusPath + "/LocalAvatar/hand_right").SetActive(false); VRTK_TransformFollow transformFollow = ovrAvatar.AddComponent(); transformFollow.gameObjectToFollow = ovrCameraRig; Debug.Log("Successfully repaired Oculus LocalAvatar prefab"); } #endif } } } #endif