我有一台想要沿2轴(x和z)移动的相机。在当地,我们有:
由于相机物体旋转,在世界空间我们有:
我想要达到的目的是:通过用户输入沿2轴移动摄像机 - 摄像机从上方看平面,按键盘按钮,用户可以沿4个平面方向滑动。通过操纵本地空间中的 transform.position.x 和 transform.position.y 属性,这非常有效。
我有以下问题:用户也可以旋转相机对象。通过这样做,我不能再操纵局部空间变换,因为在某些旋转" up"开始意味着" down"等等。
我已尝试在世界空间中执行以下操作:
transform.Translate(transform.right * user_input, Space.World);
但由于transform.right在世界空间中抓住红色矢量,因此无法实现我的目标。
我想要做的是:沿着局部空间中的红色和蓝色矢量移动相机,但仍保留世界空间中的坐标。
如果有人对此提供了一些意见,我将不胜感激。非常感谢!
答案 0 :(得分:6)
你说的不太清楚。
但很常见的是:
只需拥有持有者对象。如果你愿意,也许可以把它想象成一辆#34;相机车"。保持那个" square"在任何时候,并移动它。然后,将相机作为该物体的孩子。
然后您可以旋转(或者您正在做的任何事情)子对象。当你想要" pure"动作,你可以移动"持有人"对象
在Unity中执行此操作非常普遍,几乎是不可避免的。
我再也不知道你在问什么了:)但希望这能解决这个问题。
还有一件事:你可能意味着你希望用户移动物体,但物体总是停留在地面上。如果这就是你的意思,一种方法就是这样:只需在每一帧的末尾强制世界z位置为零(也就是说,在你的更新中添加一行代码)。这样做很常见,它会让你前进。或者,如果你正在使用Rigidbody,你会很高兴地知道Inspector中的一个复选框选择器用于约束各个轴上的移动。