我需要将一个物体从空间的起点向前移动一个特定的距离。起点没有前向矢量,所以我需要从起点到(0,0,0)计算一个。
我可以使用正确的前向矢量成功计算新的起点,但是当我使用它来移动物体时,它会将移动距离相乘而不是添加它。
// "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 //乘以moveDistance
所需的结果是= 0,0,5 //添加moveDistance
结果确实有一个前向矢量,但它的乘法而不是增加距离。当我使用游戏对象的前向矢量对myObject.position进行相同的计算时,它会增加距离。
答案 0 :(得分:2)
请记住,向量具有方向和幅度。将矢量乘以标量将乘以其每个分量。如果fwd
为(0,0,3),则将其乘以2将产生(0,0,6)。要使矢量在moveDistance
长度的同一方向上,您可以先将其标准化:
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
答案 1 :(得分:0)
尝试这样的事情:
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);