static void CreateIkCCD(MenuCommand menuCommand) { GameObject ikCCD = new GameObject("New Ik CCD"); Undo.RegisterCreatedObjectUndo(ikCCD, "Crate Ik CCD"); IkCCD2D ikCCDComponent = ikCCD.AddComponent <IkCCD2D>(); ikCCD.transform.position = GetDefaultInstantiatePosition(); GameObject selectedGO = Selection.activeGameObject; if (selectedGO) { ikCCD.transform.parent = selectedGO.transform; ikCCD.transform.localPosition = Vector3.zero; Bone2D selectedBone = selectedGO.GetComponent <Bone2D>(); if (selectedBone) { ikCCD.transform.parent = selectedBone.root.transform.parent; ikCCD.transform.position = selectedBone.endPosition; ikCCDComponent.numBones = selectedBone.chainLength; ikCCDComponent.target = selectedBone; } } ikCCD.transform.rotation = Quaternion.identity; ikCCD.transform.localScale = Vector3.one; Selection.activeGameObject = ikCCD; }
override public void OnInspectorGUI() { IkCCD2D ikCCD2D = target as IkCCD2D; base.OnInspectorGUI(); SerializedProperty numBonesProp = serializedObject.FindProperty("m_NumBones"); SerializedProperty iterationsProp = serializedObject.FindProperty("iterations"); SerializedProperty dampingProp = serializedObject.FindProperty("damping"); Bone2D targetBone = ikCCD2D.target; serializedObject.Update(); EditorGUI.BeginDisabledGroup(!targetBone); EditorGUI.BeginChangeCheck(); int chainLength = 0; if (targetBone) { chainLength = targetBone.chainLength; } EditorGUILayout.IntSlider(numBonesProp, 0, chainLength); if (EditorGUI.EndChangeCheck()) { Undo.RegisterCompleteObjectUndo(ikCCD2D, "Set num bones"); IkUtils.InitializeIk2D(serializedObject); EditorUpdater.SetDirty("Set num bones"); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(iterationsProp); EditorGUILayout.PropertyField(dampingProp); if (EditorGUI.EndChangeCheck()) { EditorUpdater.SetDirty(Undo.GetCurrentGroupName()); } serializedObject.ApplyModifiedProperties(); }