Advertisement
THE_T_V1RUS

Untitled

May 13th, 2025
388
0
12 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.91 KB | Gaming | 0 0
  1. using UnityEngine;
  2.  
  3. public class SecurityCamera : MonoBehaviour
  4. {
  5.     [Header("Detection Settings")]
  6.     public float sphereCastRadius = 3f;
  7.     public float viewDistance = 20f;
  8.     [Range(0f, 180f)]
  9.     public float horizontalFOV = 90f;
  10.     [Range(0f, 90f)]
  11.     public float verticalFOV = 45f;
  12.  
  13.     [Header("Layers")]
  14.     public LayerMask obstacleMask;  // For walls/obstacles
  15.     public LayerMask detectionMask; // Should include "Player" layer
  16.  
  17.     private Transform player;
  18.  
  19.     private void Start()
  20.     {
  21.         GameObject playerObj = GameObject.FindGameObjectWithTag("Player");
  22.         if (playerObj != null)
  23.             player = playerObj.transform;
  24.         else
  25.             Debug.LogError("Player not found. Make sure it's tagged as 'Player'.");
  26.     }
  27.  
  28.     private void FixedUpdate()
  29.     {
  30.         if (player == null)
  31.             return;
  32.  
  33.         // Check if player is within detection radius
  34.         Collider[] hits = Physics.OverlapSphere(transform.position, viewDistance, detectionMask);
  35.  
  36.         foreach (var hit in hits)
  37.         {
  38.             if (!hit.CompareTag("Player"))
  39.                 continue;
  40.  
  41.             Vector3 directionToPlayer = hit.transform.position - transform.position;
  42.  
  43.             // Horizontal FOV check
  44.             Vector3 horizontalDir = directionToPlayer;
  45.             horizontalDir.y = 0;
  46.             Vector3 forwardFlat = transform.forward;
  47.             forwardFlat.y = 0;
  48.  
  49.             float horizontalAngle = Vector3.Angle(forwardFlat, horizontalDir);
  50.  
  51.             // Vertical FOV check
  52.             float verticalOffset = directionToPlayer.y;
  53.             float verticalAngle = Mathf.Atan2(verticalOffset, horizontalDir.magnitude) * Mathf.Rad2Deg;
  54.  
  55.             if (horizontalAngle <= horizontalFOV * 0.5f && Mathf.Abs(verticalAngle) <= verticalFOV * 0.5f)
  56.             {
  57.                 // Check line of sight
  58.                 if (Physics.Raycast(transform.position, directionToPlayer.normalized, out RaycastHit rayHit, viewDistance, ~obstacleMask))
  59.                 {
  60.                     if (rayHit.transform.CompareTag("Player"))
  61.                     {
  62.                         Debug.Log("Player detected!");
  63.                         // Your detection logic here
  64.                     }
  65.                 }
  66.             }
  67.         }
  68.     }
  69.  
  70.     private void OnDrawGizmosSelected()
  71.     {
  72.         // Sphere radius
  73.         Gizmos.color = Color.yellow;
  74.         Gizmos.DrawWireSphere(transform.position, viewDistance);
  75.  
  76.         // FOV boundaries
  77.         Gizmos.color = Color.green;
  78.         Vector3 rightBoundary = Quaternion.Euler(0, horizontalFOV * 0.5f, 0) * transform.forward;
  79.         Vector3 leftBoundary = Quaternion.Euler(0, -horizontalFOV * 0.5f, 0) * transform.forward;
  80.         Gizmos.DrawLine(transform.position, transform.position + rightBoundary * viewDistance);
  81.         Gizmos.DrawLine(transform.position, transform.position + leftBoundary * viewDistance);
  82.     }
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement