C#如何使边界适合旋转的摄影机
在Unity中,我有一个类正在创建一个新的边界,对于那些不知道Unity边界实际上只是一个立方体的人来说。然后,我有一个像摄影机这样的对象,我想将此边界添加到摄影机,并缩放它以适应视锥体周围。这将是很容易的,如果它从来没有旋转,但相机是旋转的,在这一刻我画一个空白 这就是我现在看到的,当相机不旋转时,开关工作C#如何使边界适合旋转的摄影机,c#,unity3d,C#,Unity3d,在Unity中,我有一个类正在创建一个新的边界,对于那些不知道Unity边界实际上只是一个立方体的人来说。然后,我有一个像摄影机这样的对象,我想将此边界添加到摄影机,并缩放它以适应视锥体周围。这将是很容易的,如果它从来没有旋转,但相机是旋转的,在这一刻我画一个空白 这就是我现在看到的,当相机不旋转时,开关工作 float h = Mathf.Tan(cam.fov * Mathf.Deg2Rad * .5f) * cam.farClipPlane * 2; Vector3 sca
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中的对象。问题是,物体离远平面越近,发生的爆炸就越多。因此,我的解决方案是创建一个包含相机的边界,但它将比圆台更大(现在,直到我的旋转工作的大小相同+额外的东西,因为它不是圆台)。但是为了让它工作,我需要它根据旋转调整大小