Files
BABA_YAGA/Assets/Scripts/AI NPC/FieldOfView.cs
2026-06-05 15:59:33 +07:00

52 lines
1.6 KiB
C#

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);
}
}
}
}
}