void OnEnable()
        {
            if (script == null)
            {
                return;
            }
            if (Application.isPlaying)
            {
                return;
            }

            // Autodetection
            if (script.references.IsEmpty(false))
            {
                Animator animator = script.gameObject.GetComponent <Animator>();

                if (animator == null && script.references.root != null)
                {
                    animator = script.references.root.GetComponentInChildren <Animator>();
                    if (animator == null)
                    {
                        animator = GetAnimatorInParents(script.references.root);
                    }
                }

                if (animator != null)
                {
                    script.references = BipedRagdollReferences.FromAvatar(animator);
                }
                else
                {
                    BipedReferences r = new BipedReferences();
                    BipedReferences.AutoDetectReferences(ref r, script.transform, BipedReferences.AutoDetectParams.Default);
                    if (r.isFilled)
                    {
                        script.references = BipedRagdollReferences.FromBipedReferences(r);
                    }
                }

                if (!OnRoot())
                {
                    Debug.LogWarning("BipedRagdollCreator must be added to the root of the character. Destroying the component.");
                    DestroyImmediate(script);
                    return;
                }

                string msg = string.Empty;
                if (script.references.IsValid(ref msg))
                {
                    script.options = BipedRagdollCreator.AutodetectOptions(script.references);
                    //BipedRagdollCreator.Create(script.references, script.options);

                    //if (animator != null) DestroyImmediate(animator);
                    //if (script.GetComponent<Animation>() != null) DestroyImmediate(script.GetComponent<Animation>());
                }
            }
        }
Ejemplo n.º 2
0
        public override void OnInspectorGUI()
        {
            miniLabelStyle.wordWrap         = true;
            miniLabelStyle.fontSize         = 9;
            miniLabelStyle.normal.textColor = EditorStyles.miniLabel.normal.textColor;

            serializedObject.Update();

            if (Application.isPlaying)
            {
                GUILayout.BeginVertical("Box");
                GUILayout.Label("Can not edit ragdolls in play mode.");
                GUILayout.EndVertical();
                return;
            }

            GUI.changed = false;
            GUILayout.Space(10);
            EditorGUILayout.BeginVertical("Box");
            int indent = EditorGUI.indentLevel;

            EditorGUI.indentLevel = 1;

            EditorGUILayout.PropertyField(serializedObject.FindProperty("references"), new GUIContent("References", "Definition of the biped ragdoll."), true);

            if (GUI.changed)
            {
                serializedObject.ApplyModifiedProperties();
                EditorUtility.SetDirty(script);
            }

            bool referencesValid = script.references.IsValid();

            if (serializedObject.FindProperty("references").isExpanded)
            {
                GUILayout.Space(5);
            }
            EditorGUILayout.EndVertical();

            if (referencesValid)
            {
                if (!script.canBuild)
                {
                    GUILayout.Space(5);

                    if (GUILayout.Button("Create a Ragdoll"))
                    {
                        script.canBuild = true;
                    }
                    GUILayout.Label("Clears all existing physics components, creates a new ragdoll and starts live-updating. NB! THIS CAN NOT BE UNDONE!", miniLabelStyle);
                    GUILayout.Space(5);
                }

                if (script.canBuild)
                {
                    GUI.changed = false;
                    //GUILayout.Space(5);
                    EditorGUILayout.BeginVertical("Box");
                    EditorGUILayout.PropertyField(serializedObject.FindProperty("options"), new GUIContent("Options", "Options for automatic ragdoll generation."), true);

                    if (GUI.changed)
                    {
                        serializedObject.ApplyModifiedProperties();
                        EditorUtility.SetDirty(script);
                    }
                    if (serializedObject.FindProperty("options").isExpanded)
                    {
                        GUILayout.Space(5);
                    }
                    EditorGUILayout.EndVertical();

                    BipedRagdollCreator.Create(script.references, script.options);

                    GUILayout.Space(10);

                    if (GUILayout.Button("Done"))
                    {
                        EditorGUI.indentLevel = indent;
                        DestroyImmediate(script);
                        return;
                    }

                    GUILayout.Label("Removes this component.", miniLabelStyle);

                    if (GUILayout.Button("Start Editing Manually"))
                    {
                        script.gameObject.AddComponent <RagdollEditor>();
                        EditorGUI.indentLevel = indent;
                        DestroyImmediate(script);
                        return;
                    }

                    GUILayout.Label("Replaces this component with the RagdollEditor.", miniLabelStyle);

                    GUILayout.Space(10);
                }
            }
            else
            {
                GUILayout.Space(10);
                GUILayout.BeginVertical("Box");
                GUILayout.Label("Invalid References, one or more Transforms missing.");
                GUILayout.EndVertical();
                GUILayout.Space(10);

                if (script.canBuild)
                {
                    RagdollCreator.ClearAll(script.transform);
                }
            }

            EditorGUI.indentLevel = indent;
        }