Пример #1
0
    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);
        }
    }