public override void OnInspectorGUI()
        {
            MoveenSkelLimb1 skel       = (MoveenSkelLimb1)this.skel;
            GUIStyle        labelStyle = new GUIStyle {
                fontStyle = FontStyle.Bold,
                fontSize  = 20,
                margin    = new RectOffset(10, 10, 10, 10)
            };

            EditorGUILayout.LabelField("");
            EditorGUILayout.LabelField("Structure", labelStyle);
            EditorGUILayout.LabelField("");

            bool oldValue = solveIk;

            solveIk = GUILayout.Toggle(solveIk, "regression solver help (editor only)");
            if (oldValue != solveIk)
            {
                initWanteds(skel);
            }

            EditorGUILayout.LabelField("");
            EditorGUI.BeginChangeCheck();
            Undo.RecordObject(skel, "limb1editing");

            skel.r1 = EditorGUILayout.FloatField("Bone 1 length", skel.r1);
            skel.r2 = EditorGUILayout.FloatField("Bone 2 length", skel.r2);
            skel.footPlatformHeight = EditorGUILayout.FloatField("Foot platform height", skel.footPlatformHeight);

            EditorGUILayout.LabelField("");
            EditorGUILayout.LabelField("Geometry connection", labelStyle);
            EditorGUILayout.LabelField("");

            skel.bonesGeometry[0] = (Transform)EditorGUILayout.ObjectField("Bone 1 geometry", skel.bonesGeometry[0], typeof(Transform), true);
            skel.bonesGeometry[1] = (Transform)EditorGUILayout.ObjectField("Bone 2 geometry", skel.bonesGeometry[1], typeof(Transform), true);
            skel.bonesGeometry[2] = (Transform)EditorGUILayout.ObjectField("Foot geometry", skel.bonesGeometry[2], typeof(Transform), true);

            EditorGUILayout.LabelField("");
            MoveenSkelLimb2Editor.addBonesButton(skel);
            showDefaultInspector = EditorGUILayout.Foldout(showDefaultInspector, "raw inspector", true);
            if (showDefaultInspector)
            {
                DrawDefaultInspector();
            }

            if (EditorGUI.EndChangeCheck())
            {
                //why do we need both of these?
                EditorUtility.SetDirty(skel);
                skel.needsUpdate = true;

                if (solveIk)
                {
                    skel.reset();
                    initWanteds(skel);
                }
            }
        }
        private static void Gizmo(MoveenSkelLimb1 h, GizmoType gizmoType)
        {
            if (!h.isActiveAndEnabled)
            {
                return;
            }
            OnDrawGizmos(h);
            Gizmos.color = new Color(0, 1, 0, 0.4f);
            MoveenSkelLimb2Editor.drawSimpleSpiderGizmo(h.rotJoint, h.maxLen * 0.2f, h.transform.position, h.targetPosRel);

            if (((int)gizmoType & (int)GizmoType.InSelectionHierarchy) != 0 && solveIk)
            {
                Gizmos.color = IK_GIZMO_COLOR;
                Vector3 w2s = Camera.current.WorldToScreenPoint(h.targetPos);
                if (w2s.z > 0)
                {
                    UnityEditorUtils.fillStripe2D(w2s.getXy(), IK_DISK_R1, IK_DISK_R2, 20);
                }
                drawIkHelp(h.transform, h);
            }
        }
예제 #3
0
        public static void AddNewQuadruped()
        {
            GameObject root     = createCommon("Moveen quadruped");
            Stepper5   stepper5 = root.GetComponent <MoveenStepper5>().engine;

            stepper5.leadingLegRight       = 0;
            stepper5.leadingLegLeft        = 2;
            stepper5.forceBipedalEarlyStep = false;
//            root.transform.position = root.transform.position.withSetY(0.6f);

            float w  = 0.3f;
            float v  = 0.8f;
            float lh = -0.6f;

            //legs
            {
                GameObject leg = new GameObject("Anim leg FR");
                leg.transform.parent        = root.transform;
                leg.transform.localPosition = new Vector3(w, lh, -w);
                MoveenStep2     step = leg.AddComponent <MoveenStep2>();
                MoveenSkelLimb1 skel = leg.AddComponent <MoveenSkelLimb1>();
                step.step.comfortPosRel        = new Vector3(v, -1, -v);
                skel.targetPosRel              = step.step.comfortPosRel;
                skel.rotJoint.axisRel          = new Vector3(0, 1, 0);
                skel.rotJoint.secondaryAxisRel = new Vector3(1, 0, -1).normalized;
                skel.footPlatformHeight        = 0.1f;
            }

            {
                GameObject leg = new GameObject("Anim leg BL");
                leg.transform.parent        = root.transform;
                leg.transform.localPosition = new Vector3(-w, lh, w);
                MoveenStep2     step = leg.AddComponent <MoveenStep2>();
                MoveenSkelLimb1 skel = leg.AddComponent <MoveenSkelLimb1>();
                step.step.comfortPosRel        = new Vector3(-v, -1, v);
                skel.targetPosRel              = step.step.comfortPosRel;
                skel.rotJoint.axisRel          = new Vector3(0, 1, 0);
                skel.rotJoint.secondaryAxisRel = new Vector3(-1, 0, 1).normalized;
                skel.footPlatformHeight        = 0.1f;
            }

            {
                GameObject leg = new GameObject("Anim leg FL");
                leg.transform.parent        = root.transform;
                leg.transform.localPosition = new Vector3(w, lh, w);
                MoveenStep2     step = leg.AddComponent <MoveenStep2>();
                MoveenSkelLimb1 skel = leg.AddComponent <MoveenSkelLimb1>();
                step.step.comfortPosRel        = new Vector3(v, -1, v);
                skel.targetPosRel              = step.step.comfortPosRel;
                skel.rotJoint.axisRel          = new Vector3(0, 1, 0);
                skel.rotJoint.secondaryAxisRel = new Vector3(1, 0, 1).normalized;
                skel.footPlatformHeight        = 0.1f;
            }

            {
                GameObject leg = new GameObject("Anim leg BR");
                leg.transform.parent        = root.transform;
                leg.transform.localPosition = new Vector3(-w, lh, -w);
                MoveenStep2     step = leg.AddComponent <MoveenStep2>();
                MoveenSkelLimb1 skel = leg.AddComponent <MoveenSkelLimb1>();
                step.step.comfortPosRel        = new Vector3(-v, -1, -v);
                skel.targetPosRel              = step.step.comfortPosRel;
                skel.rotJoint.axisRel          = new Vector3(0, 1, 0);
                skel.rotJoint.secondaryAxisRel = new Vector3(-1, 0, -1).normalized;
                skel.footPlatformHeight        = 0.1f;
            }

            foreach (var step in root.GetComponentsInChildren <MoveenStep2>())
            {
                step.step.stepSpeedMin       = 6f;
                step.step.stepSpeedMin       = 6f;
                step.step.comfortRadiusRatio = 0.7f;
            }
        }