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); } }
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); } }