//private void OnTriggerEnter2D(Collision2D collisionData) //{ // this.CollisionDamage(collisionData); //} private void CollisionDamage(Collision2D collisionData) { if (!this.GetPool().IsSpawned()) { return; } if (collisionData.contacts == null) { return; } if (collisionData.contactCount < 1) { return; } var point = collisionData.contacts[0].point; var normal = collisionData.contacts[0].normal; var angle = Vector3.Angle(normal, -this.transform.forward); IDamageReciver damagable = null; if (collisionData.rigidbody != null) { damagable = collisionData.rigidbody.gameObject.GetComponent <IDamageReciver>(); _rb2d.velocity = _lastVelocity = collisionData.rigidbody.velocity; } if (damagable != null) { _rb2d.velocity = _lastVelocity = Vector3.zero; damagable.Hit(_damage); } this.Despawn(); }
public void CollisionDamage(Collision2D collisionData) { IDamageReciver damaged = null; if (collisionData.rigidbody != null) { //damaged = collisionData.collider.gameObject.GetComponent<IDamageReciver>(); damaged = collisionData.rigidbody.gameObject.GetComponent <IDamageReciver>(); } if (damaged != null) { ////float e = 0.5f * collision.relativeVelocity.sqrMagnitude * _rb2d.mass; ////Vector2 normal = collision.contacts[0].normal; ////Vector2 velocity = collision.relativeVelocity; ////float v = Vector2.Dot(normal, velocity); ////float m = _rb2d.mass; ////float e = 0.5f * v * v * m; //Vector2 n = collision.contacts[0].normal; //Vector2 v = collision.relativeVelocity; //float dot = Vector2.Dot(n, v.normalized); //if (dot < Random.Range(0f, 0.5f)) return; //float v2 = dot * dot * v.sqrMagnitude; //if (Mathf.Abs(v2) < THR) //{ // v2 = 0f; // Debug.Log(v2.ToString()); //} //float m = _rb2d.mass; //float e = 0.5f * v2 * m; ////float e2 = 0.5f * collision.relativeVelocity.sqrMagnitude * _rb2d.mass; var e = CalculateCollisionDamage(collisionData); if (e > 0) { damaged.Hit(e); CreateFX(collisionData); } } else // Self { //var e = CalculateCollisionDamage(collisionData); //gameObject.GetComponent<IDamageReciver>().TakeDamageCollision(e); } }