Esempio n. 1
0
        // ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

        public void SetSpringDamperInRatio(Vector2 springDamperInRatio)
        {
            var spring = initialSpring * springDamperInRatio[0];
            var damper = initialDamper * springDamperInRatio[1];

            if (joint != null)
            {
                PHBallJointBehaviour bj = joint as PHBallJointBehaviour;
                if (bj != null)
                {
                    bj.desc.spring = spring;
                    bj.phBallJoint.SetSpring(spring);

                    bj.desc.damper = damper;
                    bj.phBallJoint.SetDamper(damper);
                }

                PHHingeJointBehaviour hj = joint as PHHingeJointBehaviour;
                if (hj != null)
                {
                    hj.desc.spring = spring;
                    hj.phHingeJoint.SetSpring(spring);

                    hj.desc.damper = damper;
                    hj.phHingeJoint.SetDamper(damper);
                }
            }
        }
    // -- Sprオブジェクトの構築を行う
    public override ObjectIf Build()
    {
        PHIKHingeActuatorIf phIKAct = phScene.CreateIKActuator(PHIKHingeActuatorIf.GetIfInfoStatic(), (PHIKHingeActuatorDesc)desc).Cast();

        phIKAct.SetName("ika:" + gameObject.name);
        phIKAct.Enable(true);

        PHHingeJointBehaviour bj = gameObject.GetComponent <PHHingeJointBehaviour>();

        if (bj != null && bj.sprObject != null)
        {
            phIKAct.AddChildObject(bj.sprObject);
        }

        return(phIKAct);
    }
Esempio n. 3
0
        // ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

        void Start()
        {
            if (joint != null)
            {
                PHBallJointBehaviour bj = joint as PHBallJointBehaviour;
                if (bj != null)
                {
                    initialSpring = bj.phBallJoint.GetSpring();
                    initialDamper = bj.phBallJoint.GetDamper();
                }

                PHHingeJointBehaviour hj = joint as PHHingeJointBehaviour;
                if (hj != null)
                {
                    initialSpring = hj.phHingeJoint.GetSpring();
                    initialDamper = hj.phHingeJoint.GetDamper();
                }
            }
        }
        void OnSceneGUI()
        {
            PH1DJointLimitBehavior limit = (PH1DJointLimitBehavior)target;
            Vec2d range = limit.desc.range;

            GameObject jointObject = limit.jointObject ? limit.jointObject : limit.gameObject;
            // Hinge
            PHHingeJointBehaviour phHingeJointBehaviour = jointObject.GetComponent <PHHingeJointBehaviour>();

            if (phHingeJointBehaviour)
            {
                GameObject jointPositionObject = phHingeJointBehaviour.jointObject ? phHingeJointBehaviour.jointObject : phHingeJointBehaviour.gameObject;
                Transform  jointTransform      = jointPositionObject.transform;
                Posed      plugPose            = phHingeJointBehaviour.plugPose;
                Posed      socketPose          = phHingeJointBehaviour.socketPose;

                Vector3    plugPosition   = plugPose.Pos().ToVector3();
                Vector3    socketPosition = socketPose.Pos().ToVector3();
                Quaternion plugRot        = plugPose.Ori().ToQuaternion();
                Quaternion socketRot      = socketPose.Ori().ToQuaternion();

                Color baseColor;
                if (limit.desc.bEnabled && limit.enabled && limit.desc.range.x < limit.desc.range.y)
                {
                    if (limit.phJointLimit == null)
                    {
                        baseColor = Color.green;
                    }
                    else
                    {
                        if (limit.phJointLimit.IsOnLimit())
                        {
                            baseColor = Color.red;
                        }
                        else
                        {
                            baseColor = Color.green;
                        }
                    }
                    baseColor.a = 0.3f;
                }
                else
                {
                    baseColor = Color.white;
                }

                EditorGUI.BeginChangeCheck();

                Vector3 jointPosition = socketPosition;
                Vector3 jointAxis     = socketRot * new Vector3(0, 0, 1);

                Handles.color = baseColor;
                Vector3 rangeXHandlePos = jointPosition + Quaternion.AngleAxis((float)(range[0] * Mathf.Rad2Deg), socketRot * new Vector3(0, 0, 1)) * (socketRot * (discRadius * handDir));
                Vector3 rangeXHandleDir = Quaternion.AngleAxis((float)(range[0] * Mathf.Rad2Deg) + 90, socketRot * new Vector3(0, 0, 1)) * (socketRot * (discRadius * handDir));
                Vector3 rangeYHandlePos = jointPosition + Quaternion.AngleAxis((float)(range[1] * Mathf.Rad2Deg), socketRot * new Vector3(0, 0, 1)) * (socketRot * (discRadius * handDir));
                Vector3 rangeYHandleDir = Quaternion.AngleAxis((float)(range[1] * Mathf.Rad2Deg) + 90, socketRot * new Vector3(0, 0, 1)) * (socketRot * (discRadius * handDir));

                Handles.DrawWireDisc(jointPosition, socketRot * new Vector3(0, 0, 1), discRadius);
                Handles.DrawSolidArc(jointPosition, jointAxis, rangeXHandlePos - jointPosition, (float)(range[1] - range[0]) * Mathf.Rad2Deg, discRadius);

                Vector3 rangeX = Handles.Slider2D(rangeXHandlePos, jointAxis, rangeXHandlePos - jointPosition, rangeXHandleDir, 0.01f, Handles.CubeHandleCap, 0f);
                Vector3 rangeY = Handles.Slider2D(rangeYHandlePos, jointAxis, rangeYHandlePos - jointPosition, rangeYHandleDir, 0.01f, Handles.CubeHandleCap, 0f);

                Handles.color = Color.yellow;
                Vector3 currentHand = plugPosition + (plugRot * ((discRadius + 0.01f) * handDir));
                Handles.DrawLine(plugPosition, currentHand);

                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RecordObject(limit, "Undo Limit Chnage");
                    float deltaRangeX = Vector3.SignedAngle(rangeXHandlePos - jointPosition, rangeX - jointPosition, jointAxis) * Mathf.Deg2Rad;
                    float deltaRangeY = Vector3.SignedAngle(rangeYHandlePos - jointPosition, rangeY - jointPosition, jointAxis) * Mathf.Deg2Rad;
                    limit.desc.range = new Vec2d(deltaRangeX + range[0], deltaRangeY + range[1]);
                    limit.OnValidate();
                }
            }
            // Slider
        }