gpt4 book ai didi

c# - 向前移动物体是乘法而不是加法

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:33 25 4
gpt4 key购买 nike

我需要将物体从空间中的起点向前移动特定距离。起点没有前向向量,所以我需要计算一个从起点到(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 进行相同的计算时,它会增加距离。

最佳答案

请记住,矢量既有方向又有大小。将一个向量乘以一个标量将乘以它的每个分量。如果 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

关于c# - 向前移动物体是乘法而不是加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30380178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com