【发布时间】:2013-10-28 00:09:05
【问题描述】:
我在世界 X、Z 轴上有一块棋盘。 我有一个相机可以旋转向下或向上看,并使用世界 Y 轴从左向右旋转。
这是相机旋转代码:
float angle = (mouseX_Current - mouseX_ActionStart) * camRotationSpeedMod;
Camera.main.transform.Rotate(0.0f, angle, 0.0f, Space.World);
angle = (mouseY_Current - mouseY_ActionStart) * camRotationSpeedMod;
Camera.main.transform.Rotate(angle, 0.0f, 0.0f, Space.Self);
使用鼠标按钮和鼠标位置输入(拖放)我在世界上平移相机。它接收一个二维向量,其中包含鼠标(拖放)操作的 X 和 Y 值。这是我使用的方法的代码:
private void CameraOnPlaneTranslation(Vector2 myVector)
{
float cameraYPos = Camera.main.transform.position.y;
Camera.main.transform.Translate(new Vector3(myVector[0], 0.0f, myVector[1]));
Camera.main.transform.position = new Vector3(Camera.main.transform.position.x, cameraYPos, Camera.main.transform.position.z);
}
问题:当我的相机没有直接朝向 Z 轴(0.0f,Z,0.0f)时,我计算的平移向量不正确。我需要改变向量的 Y 值,这样相机就不会在世界 Y 轴上移动。
谢谢
【问题讨论】:
-
您的问题有一些模棱两可的地方,在您把问题弄得更清楚之前,您不太可能得到答复。通过“拖放”,您真的是指“在左键按下时鼠标移动”吗?在第二段中,当您说“我的问题是”时,您的意思是这是您的问题陈述(您希望它如何工作),还是“翻译长度改变但不应该”? Vector2 myVector 来自哪里?它是在 mouseMove eventHandler 中调用的吗?是否也是mouseMove屏幕DeltaX,DeltaY从其他屏幕点的减少?
-
通过“拖放”,您真的是指“鼠标在左键按下时移动”吗? -> 是我的意思是相同的鼠标拖放移动不会翻译取决于相机方向的相同距离的相机。 它来自拖放方法,该方法返回鼠标在 x 和 y 轴上的距离。所以基本上我用这些值创建了一个新的向量 3 并用它来移动相机。
-
谢谢。基于此,我认为我的回答适用。我希望 Translate 方法会为您更新相机位置值,因此请消除对 Camera.main.transform.position = 的调用
-
一般来说,“拖放”一词用于将数据或文件引用从一个应用程序移动到另一个应用程序。这就是为什么你以这种方式在这里使用它需要我要求澄清。
标签: c# rotation unity3d translation axis