コード例 #1
0
ファイル: BreakableJoint2D.cs プロジェクト: vsugrob/Wyrms
    void FixedUpdate()
    {
        // Destroy itself when monitored joint was destroyed.
        if (Joint == null)
        {
            Destroy(this);

            return;
        }
        else if (!Joint.enabled)
        {
            return;
        }

        Vector2 reactionForce;
        float   reactionTorque;

        if (Joint is DistanceJoint2D)
        {
            var specificJoint = Joint as DistanceJoint2D;
            reactionForce  = specificJoint.GetReactionForce(Time.fixedDeltaTime);
            reactionTorque = specificJoint.GetReactionTorque(Time.fixedDeltaTime);
        }
        else if (Joint is HingeJoint2D)
        {
            var specificJoint = Joint as HingeJoint2D;
            reactionForce  = specificJoint.GetReactionForce(Time.fixedDeltaTime);
            reactionTorque = specificJoint.GetReactionTorque(Time.fixedDeltaTime);
        }
        else if (Joint is SliderJoint2D)
        {
            var specificJoint = Joint as SliderJoint2D;
            reactionForce  = Vector2.zero;
            reactionTorque = specificJoint.GetMotorForce(Time.fixedDeltaTime);
        }
        else if (Joint is SpringJoint2D)
        {
            var specificJoint = Joint as SpringJoint2D;
            reactionForce  = specificJoint.GetReactionForce(Time.fixedDeltaTime);
            reactionTorque = specificJoint.GetReactionTorque(Time.fixedDeltaTime);
        }
        else if (Joint is WheelJoint2D)
        {
            var specificJoint = Joint as WheelJoint2D;
            reactionForce  = Vector2.zero;
            reactionTorque = specificJoint.GetMotorTorque(Time.fixedDeltaTime);
        }
        else
        {
            Debug.LogWarning("Unsupported joint type: " + Joint.GetType().Name, this);
            Destroy(this);

            return;
        }

        if (reactionForce.magnitude >= DebugPrint_MinForce)
        {
            print(
                "reactionForce: " + reactionForce.magnitude +
                ", reactionTorque: " + reactionTorque
                );
        }

        if (reactionForce.magnitude > BreakForce || reactionTorque > BreakTorque)
        {
            var messageData = new BrokenJointData()
            {
                BreakableJoint = this,
                Force          = reactionForce,
                Torque         = reactionTorque
            };

            SendMessage(BrokenJointData.MessageName, messageData, SendMessageOptions.DontRequireReceiver);

            if (BreakBehaviour == JointBreakBehaviour.Disable)
            {
                Joint.enabled = false;
            }
            else if (BreakBehaviour == JointBreakBehaviour.Destroy)
            {
                Destroy(Joint);
            }
        }
    }
コード例 #2
0
 void OnJointBreak2D(BrokenJointData brokenJointData)
 {
     footWeldDestroyedTimestamp = Time.fixedTime;
 }