【问题标题】:What Happens When Setting transform.up in Unity在 Unity 中设置 transform.up 时会发生什么
【发布时间】:2018-09-25 21:50:11
【问题描述】:

当我统一设置 transform.up 值时会发生什么。具体来说,你能在下面的链接中解释这个视频吗

https://youtu.be/_XdqA3xbP2A

我知道它会改变对象正在查看的内容。但是,它是否看一个位置,或者它是如何看的 工作?当我更改直接 transform.up 时会发生什么?我似乎找不到一个好的解释。为什么视频中的向量做一个朝向鼠标的方向,为什么不用mousePosition本身而不是减法呢?

除此之外,您能否解释一下视频中发生了什么?

提前致谢!

【问题讨论】:

    标签: c# unity3d rotation 2d sprite


    【解决方案1】:

    基本上,当你移动一个对象时,你会以它的位置和旋转作为参考,所以如果你在一个对象的 Y 位置上增加 +1 并且这个对象被旋转,你会在那个方向上增加。

    但是使用 Vector3.up,您使用世界空间作为参考,所以

    我想在这里给你一个完整的答案,但我必须输入一些数学,简化,transform.up 是精灵指向的方向,他得到的方向是这样说的:

    "mousePosition.y" (GREEN) 是鼠标的 Y 位置,而 "mousePosition.x" (RED) 是鼠标的 X 位置,有了这两个值,你就有了一个坐标,或者一个方向(蓝色追踪线),它统一转换为四元数并将值应用于您的旋转(在 2d 中)。你想使用使用世界空间参考的 Vector3,因为如果你使用本地参考,会发生类似

    你会得到错误的方向。

    【讨论】:

    • 但是如果你使用旋转,视频是关于旋转的。此外,它让我困惑为什么它现在会旋转而不是像你说的那样移动它。你能不能解释一下。否则,真棒解释。
    • 另外我正在改变对象的transform.up,你能解释一下吗?
    • 我更新了答案,抱歉解释不好,如果你搜索一下,你会找到正确的数学答案。
    • 好的,谢谢,最后一个问题,我保证。所以,从你那里我了解到 transform.up 使用世界空间而不是本地空间。当我直接设置 transform.up 时,运动的工作方式是否会改变,或者是否相同,您能否解释一下第三段/图片的更多内容。但是做得很好,我得到了最好的答案。我会接受你的回答,但我只是想先看看我的问题是否还有更多内容。谢谢!
    • 我说我理解它是世界空间,但指的是本地空间,对不起!
    【解决方案2】:

    变换对象使用这个向上向量自动计算四元数旋转,就像从默认的 Vector3.up 到新的向上变换向量一样。

    【讨论】:

    • 能否让你的答案更清楚一点?
    • 当您将 Transform.up 属性设置为新值(新方向向量)时,变换会使用 Quaternion.FromToRotation(Vector3.up, newTransformUpValue) 自动设置 Transform.rotation 属性。就是这样。
    • 它会影响其他任何东西还是只影响旋转?带来不便敬请谅解。另外,视频中创建的矢量如何使朝向鼠标的方向,对不起。
    • 它只影响旋转。方向计算为 pointVector2 - pointVector1,其中 pointVector2 是方向正在查看的点,pointVector1 是方向开始的点,在这种情况下,point2 是鼠标单击的位置,point1 是对象的位置。世界空间实际上是用于将物体空间(矩阵)确定为我们正在处理的物体的旋转、缩放和平移位置的世界矩阵。所以Transform可以被认为是由这些旋转、缩放和位置矩阵计算出来的物体的世界矩阵。
    • 如果你对变换、世界空间和相机背后的数学问题感到好奇,我建议你看看曾经希望游戏开发者处理这些矩阵的 XNA 世界并在较低级别单独进行转换。目前 Monogame 框架仍在使用 XNA legacy。
    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多