C# 向前移动对象是相乘而不是相加
我需要将一个物体向前移动一段距离,距离空间的起点。起点没有正向向量,所以我需要从起点到(0,0,0)计算一个 我可以用正确的正向向量成功地计算出一个新的起点,但是当我使用它移动一个对象时,它会乘以移动距离,而不是将其相加C# 向前移动对象是相乘而不是相加,c#,unity3d,C#,Unity3d,我需要将一个物体向前移动一段距离,距离空间的起点。起点没有正向向量,所以我需要从起点到(0,0,0)计算一个 我可以用正确的正向向量成功地计算出一个新的起点,但是当我使用它移动一个对象时,它会乘以移动距离,而不是将其相加 // "start" is actually a raycast hit point, but am using a Vector3 here for simplicity float moveDistance = 2; Vector3 start = new Vec
// "start" is actually a raycast hit point, but am using a Vector3 here for simplicity
float moveDistance = 2;
Vector3 start = new Vector3 (0, 0, 3);
Vector3 center = new Vector3 (0, 0, 0);
Vector3 fwd = start - center;
myObject.position = start + fwd * moveDistance;
Debug.Log (fwd); //returns: (0.0, 0.0, 0.3)
Debug.Log (myObject.position); //returns: (0.0, 0.0, 9.0)
结果是myObject.position=0,0,9//乘以移动距离
期望的结果是=0,0,5//moveDistance
结果确实有一个正向向量,但它是相乘的,而不是相距。当我使用游戏对象的前向向量对myObject.position进行相同的计算时,它会增加距离。尝试以下方法:
float distanceToMove = 2;
Vector3 start = new Vector3 (0, 0, 3);
Vector3 center = new Vector3 (0, 0, 0);
Vector3 fwd = (center - start).normalized;
myObject.position = start + fwd * distanceToMove;
Debug.Log (myObject.position);
请记住,向量既有方向也有大小。将一个向量乘以一个标量将使其每个分量相乘。如果
fwd
为(0,0,3),将其乘以2将得到(0,0,6)。要获得与moveDistance
length相同方向的向量,可以先对其进行规格化:
myObject.position = start + fwd.normalized * moveDistance;
(就个人而言,我宁愿在将向量分配给fwd
之前对其进行规范化,但这取决于您。)
始终可以分离向量的方向和幅值部分,这使得单独使用它们更容易:
Vector3 move = <some vector>
Vector3 moveDir = move.normalized; //a normalized vector has length 1
float moveDist = move.magnitude; //move = moveDir * moveDist
Vector3移动=
Vector3 moveDir=move.normalized//归一化向量的长度为1
float moveDist=move.magnity//move=moveDir*moveDist
我怀疑这是您的实际代码,因为其中存在编译错误Vector3
没有transform
属性。我猜您的问题是这个表达式的操作顺序问题:start.transform.position+fwd*distanceToMove
使用“fwd=transform.forward;”从运行脚本的对象获取正向向量。相反,我需要找到一个从起点到世界原点0,0,0的正向向量;然后像这样使用向量:myObject.position=start+fwd*distanceToMove;我知道发生了什么事。从中心减去起点,这样就可以进行如下正向向量计算:Vector3 fwd=(center-start).normalized;谢谢拉特!我不知道这两件事都有可能。这会很方便的。