基于两个矢量完美地定位一个对象

本文关键字:定位 一个对象 完美 于两个 | 更新日期: 2023-09-27 18:11:51

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

我想做的(在c#中)是动态地定位和旋转这个操纵杆,只基于两个矢量3。第一个是FROM,代表棍子的最底部,而TO是棍子的最顶部。

如果已经有内置的方法,可以做到这一点伟大,但在变换和四元数的各种方法试验后,我似乎不能得到这个完美。

基于两个矢量完美地定位一个对象

首先,缩放棒以适应两点(向量)ab之间。将距离减半得到比例,因为立方体有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);

如果你真的有一个模型,你可能会注意到操纵杆的方向是错误的。Unity按照惯例使用+Z作为forward。你可以通过旋转操纵杆作为最后一步来解决这个问题,或者将模型放在操纵杆的子变换中并旋转模型,使+Z向前。如果操纵杆不在正确的中心位置,可能是因为原点不在模型的中心,或者模型的宽度不对。您可以使用与定向相同的方法来解决这个问题,或者修改代码。

无论你想做什么,停下来使用线条渲染器