【发布时间】:2017-09-22 09:38:21
【问题描述】:
我有这样的层次结构:
--gun
\--bullet
在 unity3d 中,我希望子弹特定轴与枪支特定轴相遇
像这样:
注意蓝(z axis)
这是枪的变换
我想旋转球的变换,使球的 Z 轴与枪的 Y 轴重合
像这样:
那么我该怎么做呢?谢谢
【问题讨论】:
标签: unity3d rotation transform
我有这样的层次结构:
--gun
\--bullet
在 unity3d 中,我希望子弹特定轴与枪支特定轴相遇
像这样:
注意蓝(z axis)
这是枪的变换
我想旋转球的变换,使球的 Z 轴与枪的 Y 轴重合
像这样:
那么我该怎么做呢?谢谢
【问题讨论】:
标签: unity3d rotation transform
一个简单的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 等向量(方向)和点之间的区别是相当微妙的。一般来说:点+向量=点; (点-点)=向量;矢量+矢量=矢量。但是点+点没有任何意义。
我认为使用LookRotation 可能会解决您的问题。
bullet.transform.rotation = Quaternion.LookRotation(gun.transform.forward, gun.transform.up);
它的作用是基于一个向前和向上的向量创建一个旋转。因此,您可能想要设置与我在示例中不同的设置,但希望您能理解。
【讨论】: