public TargetInView FindTarget() { var playerInView = new TargetInView(); var playersInRadius = Physics2D.OverlapCircleAll(transform.position, ViewRadius, PlayerMask); if (playersInRadius == null || playersInRadius.Length == 0) { return(playerInView); } foreach (var playerInRadius in playersInRadius) { var playerDistance = (Vector2)(playerInRadius.transform.position - transform.position); var playerDirection = playerDistance.normalized; if (Vector2.Angle(LookDirection, playerDirection) >= ViewAngle / 2) { continue; } var distToPlayer = Vector2.Distance(transform.position, playerInRadius.transform.position); var obstacleInBetween = Physics2D.Raycast(transform.position, playerDirection, distToPlayer, ObstacleMask); if (obstacleInBetween) { continue; } playerInView.AddTargetInfo(playerInRadius.transform, playerDistance.magnitude); } return(playerInView); }
public bool TryFindTarget(out TargetInView targetInView) { targetInView = FindTarget(); return(targetInView.isTargetInView); }