【问题标题】:How to make unity transform axis look at specific direction如何使统一变换轴看向特定方向
【发布时间】:2017-09-22 09:38:21
【问题描述】:

我有这样的层次结构:

 --gun
  \--bullet

在 unity3d 中,我希望子弹特定轴与枪支特定轴相遇

像这样:

注意蓝(z axis)

这是枪的变换

我想旋转球的变换,使球的 Z 轴与枪的 Y 轴重合

像这样:

那么我该怎么做呢?谢谢

【问题讨论】:

    标签: unity3d rotation transform


    【解决方案1】:

    一个简单的LookAt 应该可以完成这项工作:

    bullet.transform.LookAt( bullet.transform.position + gun.transform.up ) ;
    

    看看

    旋转变换,使前向向量指向给定的世界位置。

    如果您希望变换的向上向量指向特定方向,您可以指定一个附加向量。

    【讨论】:

    • 谢谢,这行得通,我知道LookAt 方法,并在我问问题之前尝试过,为什么它不起作用是我错过了bullet.transform.position 部分,你能给出更多细节为什么我们应该将它添加到lookAt向量中?谢谢
    • LookAt 方法需要世界空间中的一个点。因此,如果您希望子弹的前向矢量与枪的向上矢量相同,则世界空间中唯一满足此条件的点是bullet.transform.position + gun.transform.up。只提供gun.transform.up 会给你点(0,0,0) + gun.transform.up
    • transform.up 等向量(方向)和点之间的区别是相当微妙的。一般来说:点+向量=点; (点-点)=向量;矢量+矢量=矢量。但是点+点没有任何意义。
    • 嗨,谢谢,我现在明白了,我们应该始终lookAt一点,对吧? :D
    • 是的,确实如此。 @MrDos 的答案是另一种方式,使用四元数和方向向量(而不是点)
    【解决方案2】:

    我认为使用LookRotation 可能会解决您的问题。

    bullet.transform.rotation = Quaternion.LookRotation(gun.transform.forward, gun.transform.up);
    

    它的作用是基于一个向前和向上的向量创建一个旋转。因此,您可能想要设置与我在示例中不同的设置,但希望您能理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      相关资源
      最近更新 更多