/// <summary> /// Call this to hit enemy and play hit reactions based on collision point. /// impact determines damage. /// </summary> public void Hit(Collider hitCollider, Vector3 collisionPoint, float impact) { if (!isHit) { isHit = true; int damage = 5 * (int)impact + Random.Range(-10, 10); // Run hit animation Vector3 dir = hitCollider.transform.position - collisionPoint; hitReaction.Hit(hitCollider, dir.normalized * impact / 5, collisionPoint); // Show hit number pop up if (hitPoints > 0) { ShowHitNumber(damage); // Calculate damage OnHit(damage); // Play Effect HitEffect(collisionPoint); RandomHitSound(); print("damage " + damage + " impact " + impact); } } }
private void OnCollisionEnter(Collision other) { Debug.Log("collision"); var hitCollider = other.contacts[0].thisCollider; var point = other.GetContact(0).point; hitReaction.Hit(hitCollider, other.rigidbody.velocity * hitForce, point); }
public void reactOnHit(Collider collider, Vector3 force, Vector3 point) { m_hitReaction.Hit(collider, force, point); }
public void Hit(Collider collider, Vector3 direction, Vector3 point, int damage) { //Debug.LogWarning(direction.magnitude); //if (isDead) // return; if (actionState != MonsterStateEnum.Normal) { return; } //if (isHitReact) // return; currentHP -= damage; if (currentHP < 0) { isDead = true; } //isHitReact = true; SetState(MonsterStateEnum.HitReact); float hitForce = direction.magnitude; if (hitForce < LightHitForceGrade) { // Use the HitReaction hitReaction.Hit(collider, direction, point); if (isDead) { animator.SetBool("IsDead", true); SetState(MonsterStateEnum.Dead); } else { animator.SetBool("IsHit", true); hitReactType = 0; } //direction.y = 0; //transform.Translate(direction); ////rigidbody.velocity = (direction.normalized + (Vector3.up * 1)) * 1 * 1; //rigidbody.velocity = direction; } else if (hitForce < MediumHitForceGrade) { // Use the HitReaction hitReaction.Hit(collider, direction, point); //Vector3 forward = transform.TransformDirection(Vector3.forward); if (Vector3.Dot(transform.forward, direction) < 0) { animator.SetBool("IsKnockDownFront", true); } else { animator.SetBool("IsKnockDownBack", true); } hitReactType = 1; } else if (hitForce < HardHitForceGrade) { //animator.SetBool("IsKnockDown", true); ragdollUtility.EnableRagdoll(); hitReactType = 2; Rigidbody rigi = collider.gameObject.GetComponent <Rigidbody>(); if (rigi != null) { rigidbody.velocity = direction; } currentHP = 0; isDead = true; SetState(MonsterStateEnum.Dead); } else { //Knock Away } }