/// <summary> /// Checks to see if the punch hit anything /// </summary> void checkPunch() { Vector3 origin = transform.position - (transform.forward * playerRadius) + attackPoint; int layerMask = 1 << LayerMask.NameToLayer("Enemy"); float switchdir = -1; float widthScale = 0.5f; bool hitCollided = false; for (int i = 0; i < 3; i++) { switchdir *= -1; if (Physics.Raycast(origin, transform.forward, out RaycastHit hit, punchRange, layerMask)) { bool wasHit = false; foreach (GameObject child in hitEnemies) { if (hit.collider.gameObject.Equals(child)) { wasHit = true; break; } } if (!wasHit) { hitCollided = true; if (!hit.collider.gameObject.GetComponent <AI>().channeling) { hit.collider.GetComponent <AI>().takeDamage(punchDamage); } if (hit.collider.gameObject.GetComponent <AI>().isDead) { points.gainKills(); } hitEnemies.Add(hit.collider.gameObject); } } origin += transform.right * (playerRadius * widthScale) * switchdir; widthScale += 0.5f; } if (hitCollided) { input.setVibration(1, 0.1f); OnHit.Invoke(); } }