Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何使边界适合旋转的摄影机_C#_Unity3d - Fatal编程技术网

C#如何使边界适合旋转的摄影机

C#如何使边界适合旋转的摄影机,c#,unity3d,C#,Unity3d,在Unity中,我有一个类正在创建一个新的边界,对于那些不知道Unity边界实际上只是一个立方体的人来说。然后,我有一个像摄影机这样的对象,我想将此边界添加到摄影机,并缩放它以适应视锥体周围。这将是很容易的,如果它从来没有旋转,但相机是旋转的,在这一刻我画一个空白 这就是我现在看到的,当相机不旋转时,开关工作 float h = Mathf.Tan(cam.fov * Mathf.Deg2Rad * .5f) * cam.farClipPlane * 2; Vector3 sca

在Unity中,我有一个类正在创建一个新的边界,对于那些不知道Unity边界实际上只是一个立方体的人来说。然后,我有一个像摄影机这样的对象,我想将此边界添加到摄影机,并缩放它以适应视锥体周围。这将是很容易的,如果它从来没有旋转,但相机是旋转的,在这一刻我画一个空白

这就是我现在看到的,当相机不旋转时,开关工作

    float h = Mathf.Tan(cam.fov * Mathf.Deg2Rad * .5f) * cam.farClipPlane * 2;
    Vector3 scale = new Vector3(h * cam.aspect, h, cam.farClipPlane);

    newBounds.center = cam.transform.position + cam.transform.forward * (cam.farClipPlane/2);
    newBounds.size = scale; 

每当我们在BoxCollider上设置边界时,我们只设置边界的大小和中心,这些边界包含相对于局部位置和旋转的大小和中心 因此,您不需要为旋转编写代码,只需设置

transform.GetComponent().center
transform.GetComponent().size


边界将根据游戏对象的变换自动旋转

Im不使用长方体碰撞器,Im不使用任何类型的碰撞器。这不是为了碰撞。我只需要知道包含相机的区域及其视图frust,而不是视图frust本身。在脚本中,我通过执行bounds newBounds=newBounds()创建一个边界,并存储父旋转并相应地编写方法。这也是unity在碰撞检查之前将父变换应用于边界的方式。为了了解更多信息,您需要解释如何使用这些边界???我使用边界所做的是我为流媒体世界编写了一个动态遮挡剔除系统。我有所有的工作,它只检查视图frust中的对象。问题是,物体离远平面越近,发生的爆炸就越多。因此,我的解决方案是创建一个包含相机的边界,但它将比圆台更大(现在,直到我的旋转工作的大小相同+额外的东西,因为它不是圆台)。但是为了让它工作,我需要它根据旋转调整大小