Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class SecurityCamera : MonoBehaviour
- {
- [Header("Detection Settings")]
- public float sphereCastRadius = 3f;
- public float viewDistance = 20f;
- [Range(0f, 180f)]
- public float horizontalFOV = 90f;
- [Range(0f, 90f)]
- public float verticalFOV = 45f;
- [Header("Layers")]
- public LayerMask obstacleMask; // For walls/obstacles
- public LayerMask detectionMask; // Should include "Player" layer
- private Transform player;
- private void Start()
- {
- GameObject playerObj = GameObject.FindGameObjectWithTag("Player");
- if (playerObj != null)
- player = playerObj.transform;
- else
- Debug.LogError("Player not found. Make sure it's tagged as 'Player'.");
- }
- private void FixedUpdate()
- {
- if (player == null)
- return;
- // Check if player is within detection radius
- Collider[] hits = Physics.OverlapSphere(transform.position, viewDistance, detectionMask);
- foreach (var hit in hits)
- {
- if (!hit.CompareTag("Player"))
- continue;
- Vector3 directionToPlayer = hit.transform.position - transform.position;
- // Horizontal FOV check
- Vector3 horizontalDir = directionToPlayer;
- horizontalDir.y = 0;
- Vector3 forwardFlat = transform.forward;
- forwardFlat.y = 0;
- float horizontalAngle = Vector3.Angle(forwardFlat, horizontalDir);
- // Vertical FOV check
- float verticalOffset = directionToPlayer.y;
- float verticalAngle = Mathf.Atan2(verticalOffset, horizontalDir.magnitude) * Mathf.Rad2Deg;
- if (horizontalAngle <= horizontalFOV * 0.5f && Mathf.Abs(verticalAngle) <= verticalFOV * 0.5f)
- {
- // Check line of sight
- if (Physics.Raycast(transform.position, directionToPlayer.normalized, out RaycastHit rayHit, viewDistance, ~obstacleMask))
- {
- if (rayHit.transform.CompareTag("Player"))
- {
- Debug.Log("Player detected!");
- // Your detection logic here
- }
- }
- }
- }
- }
- private void OnDrawGizmosSelected()
- {
- // Sphere radius
- Gizmos.color = Color.yellow;
- Gizmos.DrawWireSphere(transform.position, viewDistance);
- // FOV boundaries
- Gizmos.color = Color.green;
- Vector3 rightBoundary = Quaternion.Euler(0, horizontalFOV * 0.5f, 0) * transform.forward;
- Vector3 leftBoundary = Quaternion.Euler(0, -horizontalFOV * 0.5f, 0) * transform.forward;
- Gizmos.DrawLine(transform.position, transform.position + rightBoundary * viewDistance);
- Gizmos.DrawLine(transform.position, transform.position + leftBoundary * viewDistance);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement