Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于两个矢量完美定位对象3?_C#_Unity3d - Fatal编程技术网

C# 基于两个矢量完美定位对象3?

C# 基于两个矢量完美定位对象3?,c#,unity3d,C#,Unity3d,制作一个基本圆柱体游戏对象,并将其比例设置为(0.01,10,0.01)。它应该看起来像一根直立的棍子 我想做的是(在c#中)仅基于两个矢量3动态定位和旋转此杆。第一个是FROM,表示斗杆最底部的点,TO是斗杆最顶部的部分 如果已经有内置的方法可以做到这一点,但是在尝试了变换和四元数中的各种方法之后,我似乎无法做到这一点 无论您想做什么,停止并使用首先,缩放斗杆,使其适合两个点(向量)a和b。将距离减半以获得比例,因为立方体的高度为2个单位 stick.transform.localScale

制作一个基本圆柱体游戏对象,并将其比例设置为(0.01,10,0.01)。它应该看起来像一根直立的棍子

我想做的是(在c#中)仅基于两个矢量3动态定位和旋转此杆。第一个是FROM,表示斗杆最底部的点,TO是斗杆最顶部的部分


如果已经有内置的方法可以做到这一点,但是在尝试了变换和四元数中的各种方法之后,我似乎无法做到这一点

无论您想做什么,停止并使用首先,缩放斗杆,使其适合两个点(向量)
a
b
。将距离减半以获得比例,因为立方体的高度为2个单位

stick.transform.localScale = new Vector3(0.01, 0.01, (a - b).magnitude * 0.5f);
然后将斗杆中心定位在两点之间

stick.transform.position = (a + b) * 0.5f;
然后旋转斗杆

stick.transform.LookAt(b);

如果你真的有一个模型,你可能会注意到棍子的方向是错误的。统一使用+Z作为前进的约定。您可以将旋转斗杆作为最后一步来修复此问题,或者将模型放入斗杆的子变换中,然后旋转模型以使+Z向前。如果斗杆未在正确的位置居中,可能是因为原点不在模型的中心,或者模型的宽度不正确。你可以用与定向相同的方法来解决这个问题,或者修改代码。

我想我理解你的问题,我以前也做过类似的事情。我采取的步骤:1)计算两个矢量3位置之间的距离,2)缩放圆柱体,使其高度与该距离匹配,3)计算从圆柱体的起始方向旋转所需的四元数旋转(如Vector3.up)以匹配连接两个位置的矢量3,4)使用计算出的四元数旋转圆柱体,5)将气缸定位在两个位置之间的平均位置(假设其枢轴点居中)。如果您需要一个工作示例作为答案,请告诉我。这正是我试图实现的目标。。我一直在兜圈子,想让它正常工作。这很酷,谢谢你在这方面给我启发!然而,这并不能满足我的需要,因为我最终将使用真实的3d模型,而不是上面提到的简单木棍。