5using UnityEngine.UIElements;
6using UnityEditor.SceneManagement;
7using UnityEngine.SceneManagement;
14 private VisualTreeAsset m_VisualTreeAsset =
default;
16 private UnityEngine.Object viveManagerPrefab;
17 private UnityEngine.Object viveTrackerPrefab;
18 private UnityEngine.Object viveControllerPrefab;
19 private GameObject viveManagerInstance;
20 private int trackerCount = 0;
21 private int controllerCount = 0;
22 private Label trackerCountLabel;
23 private Label controllerCountLabel;
26 [MenuItem(
"CAVERN/VIVE Tracker Tools",
false, 101)]
30 wnd.titleContent =
new GUIContent(
"Vive Tracker Tools");
36 VisualElement root = rootVisualElement;
39 VisualElement panelSetup = m_VisualTreeAsset.Instantiate();
43 VisualElement viveSetupButton = root.Q(
"ViveSetupButton");
44 viveSetupButton.RegisterCallback<ClickEvent>(ViveSetup);
47 VisualElement viveControllerSetupButton = root.Q(
"ViveControllerSetupButton");
48 viveControllerSetupButton.RegisterCallback<ClickEvent>(ViveControllerSetup);
50 trackerCountLabel = root.Q<Label>(
"TrackerCount");
51 controllerCountLabel = root.Q<Label>(
"ControllerCount");
52 EditorApplication.hierarchyChanged += OnHierarchyChanged;
56 Button followButton = root.Q<Button>(
"FollowButton");
57 followButton.RegisterCallback<ClickEvent>(AddBuildingBlock<FollowInteraction>);
59 Button orbitButton = root.Q<Button>(
"OrbitButton");
60 orbitButton.RegisterCallback<ClickEvent>(AddBuildingBlock<OrbitCavernInteraction>);
62 Button evadeButton = root.Q<Button>(
"EvadeButton");
63 evadeButton.RegisterCallback<ClickEvent>(AddBuildingBlock<EvadeInteraction>);
65 Button lookAtButton = root.Q<Button>(
"LookAtButton");
66 lookAtButton.RegisterCallback<ClickEvent>(AddBuildingBlock<LookAt>);
68 Button zonesButton = root.Q<Button>(
"ZonesButton");
69 zonesButton.RegisterCallback<ClickEvent>(AddZones);
73 private void OnHierarchyChanged()
75 var trackers = FindObjectsByType<ViveTracker>(FindObjectsSortMode.None);
76 var controllers = FindObjectsByType<ViveController>(FindObjectsSortMode.None);
78 if (trackerCount != trackers.Length)
80 trackerCount = trackers.Length;
81 trackerCountLabel.text =
"VIVE Trackers in Scene: " + trackerCount;
84 if (controllerCount != controllers.Length)
86 controllerCount = controllers.Length;
87 controllerCountLabel.text =
"VIVE Controllers in Scene: " + controllerCount;
92 private void ViveSetup(ClickEvent evt)
95 viveManagerPrefab = (GameObject)AssetDatabase.LoadAssetAtPath(
"Packages/com.spelunx.cavern.vive-trackers/Prefabs/ViveTrackerManager.prefab", typeof(GameObject));
96 viveTrackerPrefab = (GameObject)AssetDatabase.LoadAssetAtPath(
"Packages/com.spelunx.cavern.vive-trackers/Prefabs/ViveTracker.prefab", typeof(GameObject));
99 var manager = FindObjectsByType<Vive_Manager>(FindObjectsSortMode.None);
102 if (manager.Length == 0)
104 viveManagerInstance = (GameObject)PrefabUtility.InstantiatePrefab(viveManagerPrefab as GameObject);
107 GameObject cavernSetup = GameObject.Find(
"CavernSetup");
108 if (cavernSetup !=
null)
110 viveManagerInstance.GetComponent<Transform>().parent = cavernSetup.transform;
117 GameObject viveTrackerInstance = (GameObject)PrefabUtility.InstantiatePrefab(viveTrackerPrefab as GameObject);
118 viveTrackerInstance.GetComponent<
ViveTracker>().SetOrigin(FindObjectsByType<Vive_Manager>(FindObjectsSortMode.None)[0].transform);
121 EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
125 private void ViveControllerSetup(ClickEvent evt)
128 viveManagerPrefab = (GameObject)AssetDatabase.LoadAssetAtPath(
"Packages/com.spelunx.cavern.vive-trackers/Prefabs/ViveTrackerManager.prefab", typeof(GameObject));
129 viveControllerPrefab = (GameObject)AssetDatabase.LoadAssetAtPath(
"Packages/com.spelunx.cavern.vive-trackers/Prefabs/ViveController.prefab", typeof(GameObject));
132 var manager = FindObjectsByType<Vive_Manager>(FindObjectsSortMode.None);
135 if (manager.Length == 0)
137 viveManagerInstance = (GameObject)PrefabUtility.InstantiatePrefab(viveManagerPrefab as GameObject);
140 GameObject cavernSetup = GameObject.Find(
"CavernSetup");
141 if (cavernSetup !=
null)
143 viveManagerInstance.GetComponent<Transform>().parent = cavernSetup.transform;
150 GameObject viveController = (GameObject)PrefabUtility.InstantiatePrefab(viveControllerPrefab as GameObject);
151 viveController.GetComponent<
ViveController>().SetOrigin(FindObjectsByType<Vive_Manager>(FindObjectsSortMode.None)[0].transform);
154 EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
158 private void AddBuildingBlock<T>(ClickEvent evt) where T :
Interaction
160 foreach (GameObject go
in Selection.gameObjects)
164 T interaction = go.AddComponent<T>();
167 ViveTracker defaultViveTracker = FindFirstObjectByType<ViveTracker>();
168 if (defaultViveTracker !=
null)
170 interaction.SetTarget(defaultViveTracker.transform);
184 private void AddZones(ClickEvent evt)
186 Zones component = FindObjectsByType<Vive_Manager>(FindObjectsSortMode.None)[0].gameObject.AddComponent(typeof(
Zones)) as
Zones;
187 component.cavern = FindFirstObjectByType<CavernRenderer>();
void SetCavernRenderer(CavernRenderer cavernRenderer)
Helpful debug information (both keyboard shortcuts and GUI) for Vive Trackers. This also adds the abi...