示例#1
0
 void OnCollisionStay(Collision collision)
 {
     contactPoints.Clear();
     if (collision.contacts.Length > 0)
     {
         //Debug.Log(this.name + " ================================= "+collision.contacts.Length);
         ContactPointInfo cp = new ContactPointInfo();
         cp.collider1 = collision.contacts[0].thisCollider;
         cp.collider2 = collision.contacts[0].otherCollider;
         cp.cp        = collision.contacts[0].point;
         cp.n         = collision.contacts[0].normal;
         cp.v         = collision.relativeVelocity;
         //Debug.Log(collision.contacts[0].thisCollider.name+"<->"+collision.contacts[0].otherCollider.name+" === "+cp.cp+"  "+cp.n+"   "+cp.v);
         //Debug.DrawLine(cp.cp, cp.cp+cp.v, Color.red);
         contactPoints.Add(cp);
     }
 }
示例#2
0
        void OnCollisionEnter(Collision collision)
        {
            //	Debug.Log(this.name + " vvvvvvvv  "+this.rigidbody.velocity);
            ContactPointInfo cp = new ContactPointInfo();

            cp.collider1 = collision.contacts[0].thisCollider;
            cp.collider2 = collision.contacts[0].otherCollider;
            cp.cp        = collision.contacts[0].point;
            cp.n         = collision.contacts[0].normal;
            cp.v         = collision.relativeVelocity;

            HitFeedback fb = new HitFeedback();

            fb.feedbackARB = this;
            fb.localPos    = this.getLocalCoordinatesPoint(cp.cp);
            //if(cp.collider2.rigidbody != null && cp.collider2.rigidbody.velocity.magnitude > 0.01f){
            fb.force = collision.relativeVelocity;
            //}else{
            //fb.force = cp.collider2.rigidbody.mass * collision.relativeVelocity;
            //}
            fb.bodySpringKp         = -19 * fb.force.magnitude + 580;
            fb.bodySpringKp         = Mathf.Clamp(fb.bodySpringKp, 10, 200);
            fb.bodySpringKd         = -0.5f * fb.force.magnitude + 20;
            fb.bodySpringKd         = Mathf.Clamp(fb.bodySpringKd, 5, 10);
            fb.rootExternalTorqueKp = -2 * fb.force.magnitude + 60;
            fb.rootExternalTorqueKp = Mathf.Clamp(fb.rootExternalTorqueKp, 0.0001f, 10);
            fb.rootExternalTorqueKd = -10 * fb.force.magnitude + 300;
            fb.rootExternalTorqueKd = Mathf.Clamp(fb.rootExternalTorqueKd, 0.0001f, 100);
            fb.power       = 6.7f * fb.force.magnitude - 100;
            fb.power       = Mathf.Clamp(fb.power, 0, 100);
            fb.isTouchDown = true;

            if (onCollisionEnterHandler != null)
            {
                onCollisionEnterHandler(fb, cp);
            }
        }