void Start() { m_gestureManager = FindObjectOfType(typeof(GestureManager)) as GestureManager; if (m_gestureManager == null) { Debug.LogError("Please add an GestureManagerPrefab to the scene"); return; } m_jointData = m_gestureManager.m_skReader.m_jointData; m_avCtrl = FindObjectOfType(typeof(SkeletonAvatarController)) as SkeletonAvatarController; if (m_avCtrl == null) { Debug.LogError("Please attach the script SkeletonAvatarController to an avatar and config the joints."); return; } m_avCtrl.SetJointDataSource(m_jointData); // m_gestureManager.m_skReader updates the JointData array, m_avCtrl uses them m_observer = new UIInfoObserver(m_gestureManager); m_gestureManager.m_gestureDetected += m_observer.OnNewGesture; m_recorder = new UISkeletonRecorder(m_jointData, m_gestureManager); m_player = new UISkeletonPlayer(m_recorder.m_skRecorder); m_marker = new UIKeyFrameMarker(m_recorder.m_skRecorder); m_trainer = new UITemplateTrainer(m_recorder.m_skRecorder, m_gestureManager.m_postFeature); m_handlers = new ButtonHandler[] { OnRecorderButton, OnPlayerButton, OnMarkerButton, OnTrainerButton }; OnRecorderButton(); // the default interface }
/// editor OnInspectorGUI to control the NIEventLogger properties override public void OnInspectorGUI() { EditorGUI.indentLevel = 0; EditorGUIUtility.LookLikeInspector(); SkeletonAvatarController controller = target as SkeletonAvatarController; // EditorGUILayout.LabelField("Controlling player", ""); // EditorGUI.indentLevel += 2; // controller.m_playerManager = EditorGUILayout.ObjectField("Player manager", controller.m_playerManager, typeof(NIPlayerManager), true) as NIPlayerManager; // controller.m_playerNumber = EditorGUILayout.IntField("Player Number", controller.m_playerNumber); // EditorGUI.indentLevel -= 2; // EditorGUILayout.Space(); EditorGUILayout.LabelField("Joints to control", ""); EditorGUI.indentLevel += 2; // make sure the joint transforms are initialized. if (controller.m_jointTransforms == null) { controller.m_jointTransforms = new Transform[Enum.GetNames(typeof(SkeletonJoint)).Length + 1]; for (int i = 0; i < controller.m_jointTransforms.Length; i++) { controller.m_jointTransforms[i] = null; } } else if (controller.m_jointTransforms.Length != Enum.GetNames(typeof(SkeletonJoint)).Length + 1) { // the skeleton joints enum changed since last time... Transform[] newVal = new Transform[Enum.GetNames(typeof(SkeletonJoint)).Length + 1]; for (int i = 0; i < newVal.Length; i++) { if (i < controller.m_jointTransforms.Length) { newVal[i] = controller.m_jointTransforms[i]; } else { newVal[i] = null; } } controller.m_jointTransforms = newVal; } foreach (SkeletonJoint joint in Enum.GetValues(typeof(SkeletonJoint))) { controller.m_jointTransforms[(int)joint] = EditorGUILayout.ObjectField("" + joint, controller.m_jointTransforms[(int)joint], typeof(Transform), true) as Transform; } EditorGUI.indentLevel -= 2; EditorGUILayout.Space(); EditorGUILayout.LabelField("What to update", ""); EditorGUI.indentLevel += 2; controller.m_updateRootPosition = EditorGUILayout.Toggle("Update Root Positions?", controller.m_updateRootPosition); //controller.m_updateJointPositions = EditorGUILayout.Toggle("Update Joint Positions?", controller.m_updateJointPositions); //controller.m_updateOrientation = EditorGUILayout.Toggle("Update joint Orientation?", controller.m_updateOrientation); EditorGUI.indentLevel -= 2; EditorGUILayout.Space(); EditorGUILayout.LabelField("Scaling & limitations", ""); EditorGUI.indentLevel += 2; controller.m_rotationDampening = EditorGUILayout.FloatField("Rotation Dampening", controller.m_rotationDampening); controller.m_scale = EditorGUILayout.FloatField("Scale", controller.m_scale); controller.m_speed = EditorGUILayout.FloatField("Torso speed scale", controller.m_speed); EditorGUI.indentLevel -= 2; EditorGUILayout.Space(); controller.m_linesDebugger = EditorGUILayout.ObjectField("Lines debugger", controller.m_linesDebugger, typeof(NISkeletonControllerLineDebugger), true) as NISkeletonControllerLineDebugger; // controller.m_linesDebuggerY = EditorGUILayout.ObjectField("Lines debugger", controller.m_linesDebuggerY, typeof(NISkeletonControllerLineDebugger), true) as NISkeletonControllerLineDebugger; // controller.m_linesDebuggerZ = EditorGUILayout.ObjectField("Lines debugger", controller.m_linesDebuggerZ, typeof(NISkeletonControllerLineDebugger), true) as NISkeletonControllerLineDebugger; EditorGUILayout.Space(); EditorGUI.indentLevel -= 2; if (GUI.changed) { EditorUtility.SetDirty(target); } }