【问题标题】:Move camera along 2 axes in WorldSpace在 WorldSpace 中沿 2 个轴移动相机
【发布时间】:2016-04-18 15:38:06
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# unity3d translate coordinate-transformation


    【解决方案1】:

    你说的不是很清楚。

    但是很常见的一点是:

    只需要一个holder对象。如果您愿意,也许可以将其视为“照相车”。始终保持那个“正方形”,然后移动它。然后,将相机作为该对象的子对象。

    然后您可以旋转(或您正在做的任何事情)子对象。当你想要“纯粹”的运动时,你可以移动“持有人”对象。

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

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


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

    【讨论】:

    • 我会这样做。
    • 我在 3D 动画和 Unity 中使用过这种方法,以便能够轻松地隔离摄像机上的变换,因此我也完全赞成这种方法。
    • 是的,这是他们“在手册中没有提到”的那些奇怪的事情之一。你在任何地方都这样做,而且总是在使用像 Unity 这样的游戏引擎的视频游戏中,但它从来没有在任何地方真正“解释”过。我经常认为 Unity 应该在某种程度上内置嵌套游戏对象的概念,因为它无处不在,也许是相机的默认设置。无论如何。 “不管它是什么”,我们优秀的 OP 正在努力实现,这可能会成为解决方案的一部分!
    • 谢谢@JoeBlow!即使对于像我这样的 Unity 新手来说,这种方法也很容易实现。当我问这个问题时,我已经走到了死胡同,因为我认为人们使用数学来计算物体的方向。非常感谢,即使您不知道提问者的意思,似乎您也可以完美回答问题。 :)
    • 嗯,重点是你得到了一个好结果,祝你好运!!
    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2020-11-09
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多