摄像机的前向矢量和从摄像机位置到原点的矢量之间的X和Y附近的度数

时间:2018-01-25 20:57:15

标签: c# .net unity3d unity5

我可以执行以下操作,以便在我使用相机和原点之间获得整体angle

var targetDirection = Vector3.zero - Camera.main.transform.position;
var angle = Vector3.Angle(targetDirection, Camera.main.transform.forward);

但是,我怎样才能获得围绕X轴的度数和围绕Y轴的度数来构成这个角度?

1 个答案:

答案 0 :(得分:0)

我用平面投影想出来了:

var targetDirection = Vector3.zero /* Note: Can replace Vector3.zero with another target. */ - Camera.main.transform.position;
var horizontalPlaneNormal = Vector3.Cross(targetDirection, Vector3.right);
var vectorX = Vector3.ProjectOnPlane(Camera.main.transform.forward, horizontalPlaneNormal);
var angleX = Vector3.SignedAngle(targetDirection, vectorX, horizontalPlaneNormal);
var verticalPlaneNormal = Vector3.Cross(targetDirection, Vector3.up);
var vectorY = Vector3.ProjectOnPlane(Camera.main.transform.forward, verticalPlaneNormal);
var angleY = Vector3.SignedAngle(targetDirection, vectorY, verticalPlaneNormal);
Debug.LogFormat("AngleX: {0}, AngleY: {1}", angleX, angleY);

<强>解释

相机可以随处观看,并可放置在任何地方。要获得精确的角度,您需要将摄像机所在的矢量投影到平面上。要构建所需的水平或垂直平面,您需要使用叉积来使其正常,以便使用ProjectOnPlane()方法。最后,您可以在两个矢量之间获得一个有角度的角度(目标方向矢量和相对于相机所在位置的投影矢量)。代码说明了一切。干杯!