我有一个相机,我想沿 2 个轴(x 和 z)移动。在局部空间我们有:
因为相机对象是旋转的,所以在世界空间中我们有:
我想要实现的是:通过用户输入沿 2 个轴移动相机 - 相机从上方观察平面并通过按下键盘按钮,用户可以在 4 个平面方向上沿平面滑动。这通过在局部空间中操作transform.position.x 和transform.position.y 属性完美地工作。
但我有以下问题:用户还可以旋转相机对象。通过这样做,我无法再操纵局部空间变换,因为在某些旋转时“向上”开始意味着“向下”等等。
我尝试在世界空间中执行以下操作:
transform.Translate(transform.right * user_input, Space.World);
但这并没有达到我想要的效果,因为 transform.right 捕获了世界空间中的红色矢量。
我想做的是:沿局部空间中的红色和蓝色向量移动相机,但仍保留世界空间中的坐标。
如果有人对此提供一些意见,我将不胜感激。非常感谢!
最佳答案
你说的不是很清楚。
但是一个很常见的事情是:
只需拥有一个holder 对象。如果你愿意,也许可以把它想象成一辆“照相车”。始终保持那个“正方形”,并四处移动。然后,将相机作为该对象的子对象。
然后您可以旋转(或任何您正在做的事情)子对象。当你想要“纯”运动时,你可以移动“holder”对象。
在 Unity 中这样做非常普遍,几乎不可避免。
同样,我不知道您在问什么 :) 但希望这能解决问题。
还有一件事:您的意思可能是您希望用户四处移动对象,但是对象始终停留在地面上。如果这就是您的意思,一种方法是:在每一帧的末尾强制世界 z 位置为零(也就是说,通过在您的更新中添加一行代码)。这样做很常见,它会让你前进。或者,如果您使用的是 Rigidbody,您会很高兴地知道 Inspector 中确实有一个复选框选择器用于限制各个轴上的移动。
关于c# - 在 WorldSpace 中沿 2 个轴移动相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770486/