public override void Fire(Vector3 direction) { base.Fire(direction); HitLayerMask = TeamInfo.Invert(HitLayerMask); float range = Life * Speed; var hits = Physics.RaycastAll(transform.position, direction, range, HitLayerMask | TerrainLayerMask); bool any = false; foreach (var hit in hits) { if (IsValidTarget(hit, out Health health)) { health.Heal(Damage); Hit(hit.point, hit.normal); Renderer.SetPositions(transform.position, hit.point); any = true; break; } } if (!any) { Renderer.SetPositions(transform.position, transform.position + direction * range); } }