我可以执行以下操作,以便在我使用相机和原点之间获得整体angle
:
var targetDirection = Vector3.zero - Camera.main.transform.position;
var angle = Vector3.Angle(targetDirection, Camera.main.transform.forward);
但是,我怎样才能获得围绕X轴的度数和围绕Y轴的度数来构成这个角度?
答案 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()
方法。最后,您可以在两个矢量之间获得一个有角度的角度(目标方向矢量和相对于相机所在位置的投影矢量)。代码说明了一切。干杯!