Example #1
0
    void OnGUI()
    {
        #region measure distance between two objects
        measureTwoObjects = EditorGUILayout.BeginToggleGroup ("Measure two characters", measureTwoObjects);
        if (measureTwoObjects) {
            MeasureObjectA = (GameObject)EditorGUILayout.ObjectField (MeasureObjectA, typeof(GameObject));
            MeasureObjectB = (GameObject)EditorGUILayout.ObjectField (MeasureObjectB, typeof(GameObject));
            if (GUILayout.Button ("Measure the distance of two game object")) {
                float distanceOfCharacter = Util.DistanceOfCharacters (MeasureObjectA, MeasureObjectB);
        //			float distanceOfCharacter_XZ = Util.DistanceOfCharactersXZ(MeasureObjectA, MeasureObjectB);
                float distanceOfTransform = Vector3.Distance (MeasureObjectA.transform.position, MeasureObjectB.transform.position);
                Debug.Log (string.Format ("Distance of character:{0}; Distance of transform:{1};", distanceOfCharacter, distanceOfTransform));
            }
        }
        EditorGUILayout.EndToggleGroup ();
        #endregion

        #region print position and rotation

        if (GUILayout.Button ("Print selection active position + rotation, and audio source status.")) {
            string msg = string.Format ("Position:{0}, Rotation:{1}, AudioSource:{2}",
                                       Selection.activeGameObject.transform.position,
                                       Selection.activeGameObject.transform.rotation,
                                       Selection.activeGameObject.GetComponent<AudioSource> () != null ? Selection.activeGameObject.GetComponent<AudioSource> ().isPlaying.ToString () : "no audio"
                                      );
            Debug.Log (msg);
        }
        #endregion

        #region measure two objects relative position
        MeasureTwoObjectRelativePosition = EditorGUILayout.BeginToggleGroup ("Measure two object relative position", MeasureTwoObjectRelativePosition);
        if (MeasureTwoObjectRelativePosition) {
            MeasureTransformA = (Transform)EditorGUILayout.ObjectField ("Measured A:",MeasureTransformA, typeof(Transform));
            MeasureTransformB = (Transform)EditorGUILayout.ObjectField ("Measured B:",MeasureTransformB, typeof(Transform));
            MeasureTransformC = (Transform)EditorGUILayout.ObjectField (new GUIContent("Measured C:", "C can be null, then world space"),MeasureTransformC, typeof(Transform));
            if (GUILayout.Button ("Measure object A relative position to Object B,in relative space of C")) {
                Vector3 posA = MeasureTransformA.transform.position - (MeasureTransformC != null ? MeasureTransformC.position : Vector3.zero);
                Vector3 posB = MeasureTransformB.transform.position - (MeasureTransformC != null ? MeasureTransformC.position : Vector3.zero);
                Debug.Log("PositionB - PositionA = " + (posB - posA).ToString());
            }
        }
        EditorGUILayout.EndToggleGroup ();
        #endregion

        #region copy animation events from one aniamtion asset to another animation asset
        copyAnimation = EditorGUILayout.BeginToggleGroup ("Copy animation event", copyAnimation);
        if (copyAnimation) {
            CopyFromClipA = (AnimationClip)EditorGUILayout.ObjectField (CopyFromClipA, typeof(AnimationClip));
            CopyFromClipB = (AnimationClip)EditorGUILayout.ObjectField (CopyFromClipB, typeof(AnimationClip));
            if (GUILayout.Button ("Copy animation event from A to B")) {
                EditorCommon.CopyAnimationEvents (CopyFromClipA, CopyFromClipB);
            }
        }
        EditorGUILayout.EndToggleGroup ();
        #endregion

        #region add animation event
        AddAnimationEvent = EditorGUILayout.BeginToggleGroup ("Add animation event", AddAnimationEvent);
        if (AddAnimationEvent) {
            if (Selection.activeGameObject != null) {
                int index = 0;
                string[] array = EditorCommon.GetAnimationNames (Selection.activeGameObject, AnimationNameToEdit, out index);
                if (index == -1) {
                    index = 0;
                }
                index = EditorGUILayout.Popup ("Animation:", index, array);

                AnimationNameToEdit = array [index];
                AnimationFunctionName = EditorGUILayout.TextField ("Function name:", AnimationFunctionName);
                EditorGUILayout.BeginHorizontal ();
                animationParameterType = (AnimationParameterType)EditorGUILayout.EnumPopup ("Evnet param:", animationParameterType);
                AnimationParam = EditorGUILayout.TextField ("Animation param:", AnimationParam);
                EditorGUILayout.EndHorizontal ();
                if (GUILayout.Button ("Add animation")) {
                    AnimationClip clip = Selection.activeGameObject.animation.GetClip (AnimationNameToEdit);
                    EditorCommon.AddAnimationEvent (clip, AnimationFunctionName, AnimationParam, animationParameterType);
                }
            }
        }
        EditorGUILayout.EndToggleGroup ();
        #endregion

        #region print playing animation
        string logStr_animation = "Playing animation:";
        if (GUILayout.Button ("Print selection active animation status")) {
            foreach (AnimationState ani in Selection.activeGameObject.animation) {
                bool isplaying = Selection.activeGameObject.animation.IsPlaying (ani.name);
                if (isplaying)
                    logStr_animation += ani.name + "; ";
            }
            Debug.Log (logStr_animation);
        }
        #endregion

        #region Copy ragdollJoint from one unit to another
        if (EnableCopyRagdollJointData = EditorGUILayout.BeginToggleGroup ("Copy ragdoll joint data", EnableCopyRagdollJointData)) {
            copyRagdollFrom = (Ragdoll)EditorGUILayout.ObjectField ("Copy ragdoll from:", copyRagdollFrom, typeof(Ragdoll));
            copyRagdollTo = (Ragdoll)EditorGUILayout.ObjectField ("Copy ragdoll to:", copyRagdollTo, typeof(Ragdoll));
            if (GUILayout.Button ("Copy ragdoll from-to")) {
                RagdollEditor.CopyRagdollData (copyRagdollFrom, copyRagdollTo);
            }
        }
        EditorGUILayout.EndToggleGroup ();
        #endregion

        #region print child transform path
        if (GUILayout.Button ("Print child path")) {
            string path = Util.GetChildPath (Selection.activeGameObject.transform.root, Selection.activeGameObject.transform);
            Transform s = Selection.activeGameObject.transform.root.Find (path);
            Debug.Log (s);
            Debug.Log (path);
        }
        #endregion

        #region copy ragdoll
        if (EnableCreateRagdollFromTemplate = EditorGUILayout.BeginToggleGroup ("Create ragdoll from template", EnableCreateRagdollFromTemplate)) {
            EditorGUILayout.BeginHorizontal ();
            ragdollTemplate = (GameObject)EditorGUILayout.ObjectField ("Ragdoll template:", ragdollTemplate, typeof(GameObject));
            newRagdollObject = (GameObject)EditorGUILayout.ObjectField ("New ragdoll:", newRagdollObject, typeof(GameObject));
            if (GUILayout.Button ("Create ragdoll from template")) {
                EditorCommon.CreateRagdollFromTemplate (ragdollTemplate, newRagdollObject);
            }
            EditorGUILayout.EndHorizontal ();
        }
        EditorGUILayout.EndToggleGroup ();
        #endregion

        #region edit level checkpoint
        if (EnableEditLevelCheckpoint = EditorGUILayout.BeginToggleGroup ("Edit level checkpoint", EnableEditLevelCheckpoint)) {
            string _level = "";
            string _checkpoint = "";
            bool hasCheckPoint = Persistence.GetLastCheckPoint (out _level, out _checkpoint);
            if (hasCheckPoint) {
                checkPointLevel = _level;
                checkPointName = _checkpoint;
                checkPointLevel = EditorGUILayout.TextField ("check point level", checkPointLevel);
                checkPointName = EditorGUILayout.TextField ("check point name", checkPointName);
                if (GUILayout.Button ("Delete checkpoint")) {
                    Persistence.ClearCheckPoint ();
                }
            } else {
                checkPointLevel = EditorGUILayout.TextField ("check point level", checkPointLevel);
                checkPointName = EditorGUILayout.TextField ("check point name", checkPointName);
                if (GUILayout.Button ("Save checkpoint")) {
                    Persistence.SaveCheckPoint (checkPointLevel, checkPointName);
                }
            }
        }
        EditorGUILayout.EndToggleGroup ();
        #endregion

        #region copy character pose by animation clip frame
        EnableCopyPoseByAnimationFrame = EditorGUILayout.BeginToggleGroup ("Copy pose by animation clip", EnableCopyPoseByAnimationFrame);
        if (EnableCopyPoseByAnimationFrame) {
            PoseSourceClip = (AnimationClip)EditorGUILayout.ObjectField ("Animation clip source:", PoseSourceClip, typeof(AnimationClip));
            PoseToCharacter = (GameObject)EditorGUILayout.ObjectField ("Pose to object:", PoseToCharacter, typeof(GameObject));
            if (PoseSourceClip != null && PoseToCharacter != null) {
                copyPoseOfTime = EditorGUILayout.FloatField ("Copy pose at time of the curve:", copyPoseOfTime);
                if (GUILayout.Button ("Copy pose at time")) {
                    AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves (PoseSourceClip, true);
                    string logMsg = "";
                    for (int i=curveDatas.Length-1; i>=0; i--) {
                        AnimationClipCurveData curveData = curveDatas[i];
        //						logMsg += string.Format("Path:" + curveData.path + " property:" + curveData.propertyName + " value:" + curveData.curve.Evaluate(copyPoseOfTime) + "\r\n");
                        EditorCommon.CopyCurveDataIntoTransform(PoseToCharacter.transform, curveData, copyPoseOfTime);
                    }
        //					Debug.Log(logMsg);
                }
            }
        }

        #endregion
    }
Example #2
0
    void OnGUI()
    {
        #region measure distance between two objects
        measureTwoObjects = EditorGUILayout.BeginToggleGroup("Measure two characters", measureTwoObjects);
        if (measureTwoObjects)
        {
            MeasureObjectA = (GameObject)EditorGUILayout.ObjectField(MeasureObjectA, typeof(GameObject));
            MeasureObjectB = (GameObject)EditorGUILayout.ObjectField(MeasureObjectB, typeof(GameObject));
            if (GUILayout.Button("Measure the distance of two game object"))
            {
                float distanceOfCharacter = Util.DistanceOfCharacters(MeasureObjectA, MeasureObjectB);
//			float distanceOfCharacter_XZ = Util.DistanceOfCharactersXZ(MeasureObjectA, MeasureObjectB);
                float distanceOfTransform = Vector3.Distance(MeasureObjectA.transform.position, MeasureObjectB.transform.position);
                Debug.Log(string.Format("Distance of character:{0}; Distance of transform:{1};", distanceOfCharacter, distanceOfTransform));
            }
        }
        EditorGUILayout.EndToggleGroup();
        #endregion

        #region print position and rotation

        if (GUILayout.Button("Print selection active position + rotation, and audio source status."))
        {
            string msg = string.Format("Position:{0}, Rotation:{1}, AudioSource:{2}",
                                       Selection.activeGameObject.transform.position,
                                       Selection.activeGameObject.transform.rotation,
                                       Selection.activeGameObject.GetComponent <AudioSource> () != null ? Selection.activeGameObject.GetComponent <AudioSource> ().isPlaying.ToString() : "no audio"
                                       );
            Debug.Log(msg);
        }
        #endregion

        #region measure two objects relative position
        MeasureTwoObjectRelativePosition = EditorGUILayout.BeginToggleGroup("Measure two object relative position", MeasureTwoObjectRelativePosition);
        if (MeasureTwoObjectRelativePosition)
        {
            MeasureTransformA = (Transform)EditorGUILayout.ObjectField("Measured A:", MeasureTransformA, typeof(Transform));
            MeasureTransformB = (Transform)EditorGUILayout.ObjectField("Measured B:", MeasureTransformB, typeof(Transform));
            MeasureTransformC = (Transform)EditorGUILayout.ObjectField(new GUIContent("Measured C:", "C can be null, then world space"), MeasureTransformC, typeof(Transform));
            if (GUILayout.Button("Measure object A relative position to Object B,in relative space of C"))
            {
                Vector3 posA = MeasureTransformA.transform.position - (MeasureTransformC != null ? MeasureTransformC.position : Vector3.zero);
                Vector3 posB = MeasureTransformB.transform.position - (MeasureTransformC != null ? MeasureTransformC.position : Vector3.zero);
                Debug.Log("PositionB - PositionA = " + (posB - posA).ToString());
            }
        }
        EditorGUILayout.EndToggleGroup();
        #endregion

        #region copy animation events from one aniamtion asset to another animation asset
        copyAnimation = EditorGUILayout.BeginToggleGroup("Copy animation event", copyAnimation);
        if (copyAnimation)
        {
            CopyFromClipA = (AnimationClip)EditorGUILayout.ObjectField(CopyFromClipA, typeof(AnimationClip));
            CopyFromClipB = (AnimationClip)EditorGUILayout.ObjectField(CopyFromClipB, typeof(AnimationClip));
            if (GUILayout.Button("Copy animation event from A to B"))
            {
                EditorCommon.CopyAnimationEvents(CopyFromClipA, CopyFromClipB);
            }
        }
        EditorGUILayout.EndToggleGroup();
        #endregion

        #region add animation event
        AddAnimationEvent = EditorGUILayout.BeginToggleGroup("Add animation event", AddAnimationEvent);
        if (AddAnimationEvent)
        {
            if (Selection.activeGameObject != null)
            {
                int      index = 0;
                string[] array = EditorCommon.GetAnimationNames(Selection.activeGameObject, AnimationNameToEdit, out index);
                if (index == -1)
                {
                    index = 0;
                }
                index = EditorGUILayout.Popup("Animation:", index, array);

                AnimationNameToEdit   = array [index];
                AnimationFunctionName = EditorGUILayout.TextField("Function name:", AnimationFunctionName);
                EditorGUILayout.BeginHorizontal();
                animationParameterType = (AnimationParameterType)EditorGUILayout.EnumPopup("Evnet param:", animationParameterType);
                AnimationParam         = EditorGUILayout.TextField("Animation param:", AnimationParam);
                EditorGUILayout.EndHorizontal();
                if (GUILayout.Button("Add animation"))
                {
                    AnimationClip clip = Selection.activeGameObject.animation.GetClip(AnimationNameToEdit);
                    EditorCommon.AddAnimationEvent(clip, AnimationFunctionName, AnimationParam, animationParameterType);
                }
            }
        }
        EditorGUILayout.EndToggleGroup();
        #endregion

        #region print playing animation
        string logStr_animation = "Playing animation:";
        if (GUILayout.Button("Print selection active animation status"))
        {
            foreach (AnimationState ani in Selection.activeGameObject.animation)
            {
                bool isplaying = Selection.activeGameObject.animation.IsPlaying(ani.name);
                if (isplaying)
                {
                    logStr_animation += ani.name + "; ";
                }
            }
            Debug.Log(logStr_animation);
        }
        #endregion

        #region Copy ragdollJoint from one unit to another
        if (EnableCopyRagdollJointData = EditorGUILayout.BeginToggleGroup("Copy ragdoll joint data", EnableCopyRagdollJointData))
        {
            copyRagdollFrom = (Ragdoll)EditorGUILayout.ObjectField("Copy ragdoll from:", copyRagdollFrom, typeof(Ragdoll));
            copyRagdollTo   = (Ragdoll)EditorGUILayout.ObjectField("Copy ragdoll to:", copyRagdollTo, typeof(Ragdoll));
            if (GUILayout.Button("Copy ragdoll from-to"))
            {
                RagdollEditor.CopyRagdollData(copyRagdollFrom, copyRagdollTo);
            }
        }
        EditorGUILayout.EndToggleGroup();
        #endregion

        #region print child transform path
        if (GUILayout.Button("Print child path"))
        {
            string    path = Util.GetChildPath(Selection.activeGameObject.transform.root, Selection.activeGameObject.transform);
            Transform s    = Selection.activeGameObject.transform.root.Find(path);
            Debug.Log(s);
            Debug.Log(path);
        }
        #endregion

        #region copy ragdoll
        if (EnableCreateRagdollFromTemplate = EditorGUILayout.BeginToggleGroup("Create ragdoll from template", EnableCreateRagdollFromTemplate))
        {
            EditorGUILayout.BeginHorizontal();
            ragdollTemplate  = (GameObject)EditorGUILayout.ObjectField("Ragdoll template:", ragdollTemplate, typeof(GameObject));
            newRagdollObject = (GameObject)EditorGUILayout.ObjectField("New ragdoll:", newRagdollObject, typeof(GameObject));
            if (GUILayout.Button("Create ragdoll from template"))
            {
                EditorCommon.CreateRagdollFromTemplate(ragdollTemplate, newRagdollObject);
            }
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndToggleGroup();
        #endregion

        #region edit level checkpoint
        if (EnableEditLevelCheckpoint = EditorGUILayout.BeginToggleGroup("Edit level checkpoint", EnableEditLevelCheckpoint))
        {
            string _level        = "";
            string _checkpoint   = "";
            bool   hasCheckPoint = Persistence.GetLastCheckPoint(out _level, out _checkpoint);
            if (hasCheckPoint)
            {
                checkPointLevel = _level;
                checkPointName  = _checkpoint;
                checkPointLevel = EditorGUILayout.TextField("check point level", checkPointLevel);
                checkPointName  = EditorGUILayout.TextField("check point name", checkPointName);
                if (GUILayout.Button("Delete checkpoint"))
                {
                    Persistence.ClearCheckPoint();
                }
            }
            else
            {
                checkPointLevel = EditorGUILayout.TextField("check point level", checkPointLevel);
                checkPointName  = EditorGUILayout.TextField("check point name", checkPointName);
                if (GUILayout.Button("Save checkpoint"))
                {
                    Persistence.SaveCheckPoint(checkPointLevel, checkPointName);
                }
            }
        }
        EditorGUILayout.EndToggleGroup();
        #endregion


        #region copy character pose by animation clip frame
        EnableCopyPoseByAnimationFrame = EditorGUILayout.BeginToggleGroup("Copy pose by animation clip", EnableCopyPoseByAnimationFrame);
        if (EnableCopyPoseByAnimationFrame)
        {
            PoseSourceClip  = (AnimationClip)EditorGUILayout.ObjectField("Animation clip source:", PoseSourceClip, typeof(AnimationClip));
            PoseToCharacter = (GameObject)EditorGUILayout.ObjectField("Pose to object:", PoseToCharacter, typeof(GameObject));
            if (PoseSourceClip != null && PoseToCharacter != null)
            {
                copyPoseOfTime = EditorGUILayout.FloatField("Copy pose at time of the curve:", copyPoseOfTime);
                if (GUILayout.Button("Copy pose at time"))
                {
                    AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(PoseSourceClip, true);
                    string logMsg = "";
                    for (int i = curveDatas.Length - 1; i >= 0; i--)
                    {
                        AnimationClipCurveData curveData = curveDatas[i];
//						logMsg += string.Format("Path:" + curveData.path + " property:" + curveData.propertyName + " value:" + curveData.curve.Evaluate(copyPoseOfTime) + "\r\n");
                        EditorCommon.CopyCurveDataIntoTransform(PoseToCharacter.transform, curveData, copyPoseOfTime);
                    }
//					Debug.Log(logMsg);
                }
            }
        }

        #endregion
    }