在WorldSpace中沿2轴移动相机

时间:2016-01-13 15:24:55

标签: c# unity3d translate coordinate-transformation

我有一台想要沿2轴(x和z)移动的相机。在当地,我们有:

enter image description here

由于相机物体旋转,在世界空间我们有:

enter image description here

我想要达到的目的是:通过用户输入沿2轴移动摄像机 - 摄像机从上方看平面,按键盘按钮,用户可以沿4个平面方向滑动。通过操纵本地空间中的 transform.position.x transform.position.y 属性,这非常有效。

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

我已尝试在世界空间中执行以下操作:

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

但由于transform.right在世界空间中抓住红色矢量,因此无法实现我的目标。

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

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

1 个答案:

答案 0 :(得分:6)

你说的不太清楚。

但很常见的是:

只需拥有持有者对象。如果你愿意,也许可以把它想象成一辆#34;相机车"。保持那个" square"在任何时候,并移动它。然后,将相机作为该物体的孩子。

然后您可以旋转(或者您正在做的任何事情)子对象。当你想要" pure"动作,你可以移动"持有人"对象

在Unity中执行此操作非常普遍,几乎是不可避免的。

我再也不知道你在问什么了:)但希望这能解决这个问题。

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