Spelunx Cavern SDK
 
Loading...
Searching...
No Matches
OrbbecToolsPanel.cs
Go to the documentation of this file.
2using UnityEditor;
3using UnityEngine;
4using UnityEngine.UIElements;
5using UnityEditor.SceneManagement;
6using UnityEngine.SceneManagement;
7
8namespace Spelunx
9{
10 public class OrbbecToolsPanel : EditorWindow
11 {
12 [SerializeField]
13 private VisualTreeAsset m_VisualTreeAsset = default;
14
15 // places tools under CAVERN toolbar with hierarchy ordering
16 [MenuItem("CAVERN/Orbbec Tools", false, 102)]
17 public static void ShowExample()
18 {
19 OrbbecToolsPanel wnd = GetWindow<OrbbecToolsPanel>();
20 wnd.titleContent = new GUIContent("Orbbec Tools");
21 }
22
23 public void CreateGUI()
24 {
25 // root VisualElement object of editor window
26 VisualElement root = rootVisualElement;
27
28 // Instantiate UXML, UI setup in UXML document
29 VisualElement panelSetup = m_VisualTreeAsset.Instantiate();
30 root.Add(panelSetup);
31
32 VisualElement avatarSetup = root.Q("AvatarSetup");
33 BodyTracker bodyTracker = FindFirstObjectByType<BodyTracker>();
34
35 // Hides avatar setup section if there's no BodyTracker in scene since avatar depends on it
36 if (bodyTracker == null)
37 {
38 avatarSetup.style.visibility = Visibility.Hidden;
39 }
40
41 // add functionality for the Orbbec and avatar setup buttons
42 Button orbbecSetupButton = root.Q<Button>("OrbbecSetupButton");
43 orbbecSetupButton.RegisterCallback<ClickEvent, VisualElement>(OrbbecSetup, avatarSetup);
44
45 Button avatarSetupButton = root.Q<Button>("AvatarSetupButton");
46 avatarSetupButton.RegisterCallback<ClickEvent>(AddSampleAvatar);
47 }
48
49 private void OrbbecSetup(ClickEvent evt, VisualElement avatarSetup)
50 {
51 // load from path and instantiate
52 GameObject bodyTrackerPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Packages/com.spelunx.cavern.orbbec.sdk/Prefabs/BodyTracker.prefab", typeof(GameObject));
53 GameObject bodyTrackerManagerPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Packages/com.spelunx.cavern.orbbec.sdk/Prefabs/BodyTrackerManager.prefab", typeof(GameObject));
54 GameObject bodyTrackerInstance = (GameObject)PrefabUtility.InstantiatePrefab(bodyTrackerPrefab);
55 GameObject bodyTrackerManagerInstance = (GameObject)PrefabUtility.InstantiatePrefab(bodyTrackerManagerPrefab);
56
57 bodyTrackerManagerInstance.GetComponent<BodyTrackerManager>().SetBodyTracker(bodyTrackerInstance.GetComponent<BodyTracker>());
58
59 // set avatar to be visible after Orbbec setup is present in scene
60 avatarSetup.style.visibility = Visibility.Visible;
61
62 // mark scene as changed to prompt saving
63 EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
64 }
65
66 private void AddSampleAvatar(ClickEvent evt)
67 {
68 BodyTracker bodyTracker = FindFirstObjectByType<BodyTracker>();
69
70 // load from path and instantiate
71 GameObject bodyTrackerAvatarPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Packages/com.spelunx.cavern.orbbec.sdk/Prefabs/BodyTrackerAvatar.prefab", typeof(GameObject));
72 GameObject bodyTrackerAvatarInstance = (GameObject)PrefabUtility.InstantiatePrefab(bodyTrackerAvatarPrefab);
73
74 // set default body tracker and root joint
75 bodyTrackerAvatarInstance.GetComponent<BodyTrackerAvatar>().SetBodyTracker(bodyTracker);
76 bodyTrackerAvatarInstance.GetComponent<BodyTrackerAvatar>().SetSkeletonRootJoint(bodyTracker.GetRootJoint());
77
78 // mark scene as changed to prompt saving
79 EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
80 }
81 }
82}
Manager class to pass data from FrameDataProvider to BodyTracker.
BodyTracker represents the BodyData from the ORBBEC sensor as a skeleton. Important: BodyTracker pref...
Definition: BodyTracker.cs:10