public override void OnInspectorGUI()
        {
            DrawDefaultInspector();

            SimpleRagdollAdder myRagdollAdder = (SimpleRagdollAdder)target;

            if (GUILayout.Button("Add Ragdoll To Character"))
            {
                if (myRagdollAdder.myCharacter == null)
                {
                    Debug.Log("Please add character");
                    return;
                }
                else if (myRagdollAdder.myCharacter.GetComponent <Animator>() == null)
                {
                    Debug.Log("Please add animator");
                    return;
                }
                else
                {
                    Debug.Log("Building Ragdoll...");
                    BuildRagdoll();
                }
            }
        }
        private void BuildRagdoll()
        {
            SimpleRagdollAdder myRagdollAdder = (SimpleRagdollAdder)target;
            var myAnimator = myRagdollAdder.myCharacter.GetComponent <Animator>();

            var myRagdollBuilderT = Type.GetType("UnityEditor.RagdollBuilder, UnityEditor");
            var windows           = Resources.FindObjectsOfTypeAll(myRagdollBuilderT);

            // Open the Ragdoll Builder if it isn't already opened.
            if (windows == null || windows.Length == 0)
            {
                EditorApplication.ExecuteMenuItem("GameObject/3D Object/Ragdoll...");
                windows = Resources.FindObjectsOfTypeAll(myRagdollBuilderT);
            }

            if (windows != null && windows.Length > 0)
            {
                var myRagdollWindow = windows[0] as ScriptableWizard;
                SetValueByReflection(myRagdollWindow, "pelvis", myAnimator.GetBoneTransform(HumanBodyBones.Hips));
                SetValueByReflection(myRagdollWindow, "leftHips", myAnimator.GetBoneTransform(HumanBodyBones.LeftUpperLeg));
                SetValueByReflection(myRagdollWindow, "leftKnee", myAnimator.GetBoneTransform(HumanBodyBones.LeftLowerLeg));
                SetValueByReflection(myRagdollWindow, "leftFoot", myAnimator.GetBoneTransform(HumanBodyBones.LeftFoot));
                SetValueByReflection(myRagdollWindow, "rightHips", myAnimator.GetBoneTransform(HumanBodyBones.RightUpperLeg));
                SetValueByReflection(myRagdollWindow, "rightKnee", myAnimator.GetBoneTransform(HumanBodyBones.RightLowerLeg));
                SetValueByReflection(myRagdollWindow, "rightFoot", myAnimator.GetBoneTransform(HumanBodyBones.RightFoot));
                SetValueByReflection(myRagdollWindow, "leftArm", myAnimator.GetBoneTransform(HumanBodyBones.LeftUpperArm));
                SetValueByReflection(myRagdollWindow, "leftElbow", myAnimator.GetBoneTransform(HumanBodyBones.LeftLowerArm));
                SetValueByReflection(myRagdollWindow, "rightArm", myAnimator.GetBoneTransform(HumanBodyBones.RightUpperArm));
                SetValueByReflection(myRagdollWindow, "rightElbow", myAnimator.GetBoneTransform(HumanBodyBones.RightLowerArm));
                SetValueByReflection(myRagdollWindow, "middleSpine", myAnimator.GetBoneTransform(HumanBodyBones.Spine));
                SetValueByReflection(myRagdollWindow, "head", myAnimator.GetBoneTransform(HumanBodyBones.Head));

                var method = myRagdollWindow.GetType().GetMethod("CheckConsistency", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                if (method != null)
                {
                    myRagdollWindow.errorString = (string)method.Invoke(myRagdollWindow, null);
                    myRagdollWindow.isValid     = string.IsNullOrEmpty(myRagdollWindow.errorString);
                }
            }
        }