You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.4 KiB
C#
49 lines
1.4 KiB
C#
1 month ago
|
using UnityEngine;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
[ExecuteAlways]
|
||
|
public class PlayerInBoxChecker : MonoBehaviour
|
||
|
{
|
||
|
public Camera mainCamera;
|
||
|
public Transform player;
|
||
|
public Image boxImage;
|
||
|
public LayerMask playerLayer;
|
||
|
public float maxDistance = 100f;
|
||
|
|
||
|
[Header("BoxCast Settings")]
|
||
|
public Vector2 raycastViewportPoint = new Vector2(0.5f, 0.5f);
|
||
|
public Vector3 halfExtents = new Vector3(1f, 1f, 1f); // You control this manually
|
||
|
|
||
|
private Ray ray;
|
||
|
private bool hitPlayer;
|
||
|
|
||
|
void Update()
|
||
|
{
|
||
|
if (mainCamera == null || player == null) return;
|
||
|
|
||
|
ray = mainCamera.ViewportPointToRay(new Vector3(raycastViewportPoint.x, raycastViewportPoint.y, 0f));
|
||
|
hitPlayer = false;
|
||
|
|
||
|
if (Physics.BoxCast(ray.origin, halfExtents, ray.direction, out RaycastHit hit, mainCamera.transform.rotation, maxDistance, playerLayer))
|
||
|
{
|
||
|
if (hit.transform == player)
|
||
|
{
|
||
|
hitPlayer = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (boxImage != null)
|
||
|
{
|
||
|
boxImage.color = hitPlayer ? Color.green : Color.red;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void OnDrawGizmos()
|
||
|
{
|
||
|
if (mainCamera == null) return;
|
||
|
|
||
|
Gizmos.color = hitPlayer ? Color.green : Color.red;
|
||
|
Gizmos.matrix = Matrix4x4.TRS(ray.origin + ray.direction * (maxDistance * 0.5f), mainCamera.transform.rotation, Vector3.one);
|
||
|
Gizmos.DrawWireCube(Vector3.zero, halfExtents * 2f);
|
||
|
}
|
||
|
}
|