using System.Collections; using UnityEngine; public class FieldOfView : MonoBehaviour { [Range(0, 360)] public float viewAngle = 90f; public float viewRadius = 20f; public LayerMask obstacleLayerMask; public LayerMask targetLayerMask; [HideInInspector] public bool canSeePlayer = false; [HideInInspector] public Vector3 lastKnownPlayerPosition; void Start() { StartCoroutine(FindTargetWithDelay(0.1f)); } IEnumerator FindTargetWithDelay(float delay) { while (true) { yield return new WaitForSeconds(delay); FindVisibleTargets(); } } private void FindVisibleTargets() { canSeePlayer = false; var colliders = Physics.OverlapSphere(transform.position, viewRadius, targetLayerMask); for (int i = 0; i < colliders.Length; i++) { var target = colliders[i].transform; var direction = (target.position - transform.position).normalized; var angle = Vector3.Angle(transform.forward, direction); if (angle < viewAngle / 2) { float distanceToTarget = Vector3.Distance(transform.position, target.position); if (!Physics.Raycast(transform.position, direction, distanceToTarget, obstacleLayerMask)) { canSeePlayer = true; lastKnownPlayerPosition = target.position; Debug.DrawLine(transform.position, target.position, Color.blue, 1f); } } } } }