在WorldSpace中沿2轴移动相机

Exp*_*ger 1 c# translate unity-game-engine coordinate-transformation

我有一台相机,我想沿着2轴(x和z)移动.在当地空间,我们有:

在此输入图像描述

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

在此输入图像描述

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

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

我试过在世界空间中做以下事情:

transform.Translate(transform.right * user_input, Space.World);
Run Code Online (Sandbox Code Playgroud)

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

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

如果有人提供了一些意见,我将不胜感激.谢谢你!

Fat*_*tie 6

你说的不是很清楚.

但一个很常见的事情是:

只需拥有一个持有人对象.如果你愿意,也许可以把它想象成"相机车".始终保持一个"正方形",并移动它.然后,让相机作为该对象的孩子.

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

在Unity中执行此操作是极其常见的,几乎是不可避免的.

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


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