我正在尝试使用 Frustum 来检测对象是否在屏幕的方形部分内(见下图)这是一个 UI 图像,用作目标框而不是 3D 对象。
现在我可以让 Frustum 并绘制盒子工作,但只能朝一个方向看。
我需要能够在相机转动时计算新点,但我不知道如何计算。
下面的代码有点工作,但我需要偏移位置,以便在相机移动时它们与视图对齐。
编辑:现在什么都不应该发生,但绘制框并使其工作。碰撞检测紧随其后。
// Draw aimbox
Vector3 camPosOffset = camPos + cam.transform.forward * maxDistance;
float frustumHeight = (2.0f * maxDistance * Mathf.Tan(cam.fieldOfView * 0.5f * Mathf.Deg2Rad));
cubeVerts[0] = new Vector3(camPos.x, camPos.y, camPos.z);
cubeVerts[1] = new Vector3(camPos.x, camPos.y, camPos.z);
cubeVerts[2] = new Vector3(camPos.x, camPos.y, camPos.z);
cubeVerts[3] = new Vector3(camPos.x, camPos.y, camPos.z);
cubeVerts[4] = new Vector3(camPosOffset.x - frustumHeight, camPosOffset.y + frustumHeight, camPosOffset.z);
cubeVerts[5] = new Vector3(camPosOffset.x + frustumHeight, camPosOffset.y + frustumHeight, camPosOffset.z);
cubeVerts[6] = new Vector3(camPosOffset.x - frustumHeight, camPosOffset.y - frustumHeight, camPosOffset.z);
cubeVerts[7] = new Vector3(camPosOffset.x + frustumHeight, camPosOffset.y - frustumHeight, camPosOffset.z);
for (int i = 0; i < edges.Length; i += 2)
{
Debug.DrawLine(cubeVerts[edges[i]], cubeVerts[edges[i + 1]], Color.red);
}
红糖糍粑
DIEA
相关分类