Files
HauntedBloodlines/Assets/Scripts/fieldOfView.cs
2025-05-29 22:31:40 +03:00

61 lines
1.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class fieldOfView : MonoBehaviour
{
[SerializeField] private float viewRadius;
[SerializeField] [Range(0, 360)] private float viewAngle;
public Transform target;
public LayerMask playerMask;
public LayerMask obstacleMask;
private void Update()
{
FindPlayer();
}
void FindPlayer()
{
Collider[] targetInViewRadius = Physics.OverlapSphere(transform.position, viewRadius, playerMask);
for (int i = 0; i < targetInViewRadius.Length; i++)
{
target = targetInViewRadius[i].transform;
Vector3 dirToTarget = (target.position - transform.position).normalized;
if (Vector3.Angle(transform.forward, dirToTarget) < viewAngle/2)
{
float distToTarget = Vector3.Distance(transform.position, target.position);
if (!Physics.Raycast(transform.position,dirToTarget, distToTarget,obstacleMask))
{
print( "enemy saw the target");
}
}
}
}
public Vector3 DirFromAngle(float angleInDegrees, bool angleIsGlobal)
{
if (!angleIsGlobal)
{
angleInDegrees += transform.eulerAngles.y;
}
return new Vector3(Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), 0 , Mathf.Cos(angleInDegrees * Mathf.Deg2Rad));
}
private void OnDrawGizmos()
{
Gizmos.DrawWireSphere(transform.position, viewRadius);
Vector3 viewAngleA = DirFromAngle(-viewAngle / 2, false);
Vector3 viewAngleB = DirFromAngle(viewAngle / 2, false);
Gizmos.DrawLine(transform.position, transform.position + viewAngleA * viewRadius);
Gizmos.DrawLine(transform.position, transform.position + viewAngleB * viewRadius);
Gizmos.DrawLine(transform.position, target.position);
}
}