【问题标题】:Unity : How can I get the list of gameobjects that are inside of Camera Frustum?Unity:如何获取Camera Frustum内的游戏对象列表?
【发布时间】:2021-12-09 02:20:48
【问题描述】:

我想获取在特定相机截锥体内可见的所有游戏对象。游戏场景如下图所示。

场景包含各种游戏对象,例如树木、建筑物、汽车和行人。我想访问那些游戏对象。怎么可能接近?我可以使用哪种 Unity 方法?请帮忙。

【问题讨论】:

  • Unity 有一个函数 OnBecameVisible:docs.unity3d.com/ScriptReference/Renderer.OnBecameVisible.html(和 OnBecameInvisible) 您可以使用它来维护相机当前可见的对象列表。你对这些物体的计划到底是什么?当我们知道你想用 GameObjects 做什么时,也许会有更好的解决方案
  • 感谢您的回复。实际上,我正在尝试为自动驾驶汽车构建一个模拟器。所以我需要所有可以从汽车摄像头看到的物体。我需要他们的距离、位置、旋转、状态数据进行计算。那么有没有比你之前的建议更好的方法呢?
  • 光线投射会是更好的方法吗?
  • 我也会这么说。没有必要让汽车知道总是知道街道尽头有一栋建筑物,只要它在一定范围内。但我建议您搜索“统一自动驾驶汽车”之类的内容。应该有很多教程会告诉你如何做到这一点。
  • 您可能还想查看TestPlanesAABB。使用OnBecameVisible 时,“对象在需要在场景中渲染时被认为是可见的。它可能实际上不会被任何相机看到,但仍需要渲染阴影”。

标签: c# unity3d


【解决方案1】:
using UnityEngine;

public static class RendererExtensions
{
    public static bool IsVisibleFrom(Renderer renderer, Camera camera)
    {
        Plane[] planes = GeometryUtility.CalculateFrustumPlanes(camera);
        return GeometryUtility.TestPlanesAABB(planes, renderer.bounds);
    }
}

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多