在 WorldSpace 中沿 2 个轴移动相机

Move camera along 2 axes in WorldSpace

我有一个相机,我想沿 2 个轴(x 和 z)移动。在本地 space 我们有:

并且由于相机对象是旋转的,在世界 space 中我们有:

我想要实现的是:通过用户输入沿 2 个轴移动相机 - 相机从上方观察平面,通过按下键盘按钮,用户可以在 4 个平面方向上沿平面滑动。这通过操纵 transform.position.xtransform.position.y 属性在 local space 中完美地工作.

虽然我有以下问题:用户也可以旋转相机对象。通过这样做,我不能再操纵局部 space 变换,因为在某些旋转 "up" 开始意味着 "down" 等

我曾尝试在世界space中做以下事情:

transform.Translate(transform.right * user_input, Space.World);

但这并没有达到我想要的效果,因为 transform.right 抓住了世界 space 中的红色矢量。

我想做的是:在局部 space 中沿红色和蓝色矢量移动相机,但仍保留世界中的坐标 space。

如果有人对此提供一些意见,我将不胜感激。非常感谢!

你说的不是很清楚

但是一个很常见的事情是:

只要有一个持有人对象。如果您愿意,也许可以将其视为 "camera car"。始终保留那个 "square",并四处移动它。然后,将相机作为该对象的子对象。

然后您可以旋转(或您正在做的任何事情)子对象。当你想要 "pure" 运动时,你可以移动 "holder" 对象。

在 Unity 中这样做非常普遍,几乎不可避免。

同样,我不知道你在问什么 :) 但希望这能解决问题。


还有一件事:您的意思可能是您希望用户四处移动对象,但是对象始终停留在地面上。如果这就是您的意思,一种方法是:在每一帧的末尾强制世界 z 位置为零(也就是说,通过在您的更新中添加一行代码)。这样做很常见,它会让你前进。或者,如果您使用的是 Rigidbody,您会很高兴地知道 Inspector 中确实有一个复选框选择器用于限制各个轴上的移动。