Unity 判断物体是否在相机视野范围

在游戏开发中,经常需要判断物体是否在相机视野范围内,从而实现特定功能,例如:

  • 优化游戏性能,只渲染视野内的物体
  • 实现视野相关的游戏机制,例如敌人 AI,只有在视野内才会追击玩家

Unity 提供了 Camera.WorldToViewportPoint() 方法,可以方便地判断物体是否在视野内。

Camera.WorldToViewportPoint() 方法

该方法将物体的世界坐标转换为相机视口坐标系中的坐标。视口坐标系是一个二维坐标系,范围为 (0,0) 到 (1,1),分别对应屏幕的左下角和右上角。

如果转换后的坐标的 x 和 y 值都在 0 到 1 的范围内,则表示该物体在相机的视野范围内。

代码示例

以下是使用 Camera.WorldToViewportPoint() 方法判断物体是否在相机视野范围内的示例代码:

using UnityEngine;

public class CheckVisibility : MonoBehaviour
{
    public Transform targetObject; // 要判断的物体

    void Update()
    {
        // 获取主相机
        Camera mainCamera = Camera.main;

        // 将物体世界坐标转换为相机视口坐标
        Vector3 viewportPoint = mainCamera.WorldToViewportPoint(targetObject.transform.position);

        // 判断物体是否在相机视野内
        if (viewportPoint.x > 0 && viewportPoint.x < 1 && viewportPoint.y > 0 && viewportPoint.y < 1 && viewportPoint.z > 0) 
        {
            Debug.Log('物体在相机视野范围内');
        } else 
        {
            Debug.Log('物体不在相机视野范围内');
        }
    }
}

注意事项

  • viewportPoint.z 表示物体距离相机的深度,如果小于 0,则物体在相机后面。
  • 该方法只判断物体是否在相机的视锥体内,如果物体被其他物体遮挡,即使在视锥体内也不可见。

希望这篇简短的教程能帮助你在 Unity 中轻松判断物体是否在相机视野范围内!


原文地址: https://www.cveoy.top/t/topic/jzsR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录