Beispiel #1
0
        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);
        }
Beispiel #2
0
 public bool TryFindTarget(out TargetInView targetInView)
 {
     targetInView = FindTarget();
     return(targetInView.isTargetInView);
 }