Макс Тимашков Asked:2025-04-07 03:36:58 +0000 UTC2025-04-07 03:36:58 +0000 UTC 2025-04-07 03:36:58 +0000 UTC Unity中的距离计算和物体移动 772 再会。需要幫助。理解向量及其计算非常困难。在这个例子中,我需要找到哪个红球最接近绿球并将它移动到它那里。我理解这个逻辑,你需要检查所有物体之间的距离,取最小的物体并沿着这个向量移动。我只是不明白如何在代码中实现这一点。 c# 1 个回答 Voted Best Answer aepot 2025-04-07T04:25:18Z2025-04-07T04:25:18Z 勾股定理: 斜边的平方等于两条直角边的平方和。 c2 = a2 + b2 x在这种情况下,平面上的边是沿和 的坐标差y。为了得到这个差值,你需要减去两个点的坐标。 x = x2 - x1,y = y2 - y1 在 C# 中,2D 坐标由 表示Vector2。从另一个向量中减去一个向量相当于将这些向量的值成对减去。例如,您可以获得以下内容: Vector2 a = new Vector2(2f, 3f); Vector2 b = new Vector2(1f, 0f); Vector2 diff = b - a; // разница координат 结果是一个diff包含所需三角形的边的向量,必须找到该三角形斜边的长度。现在是讲解勾股定理的时间了。 float distance = Mathf.Sqrt(diff.x * diff.x + diff.y * diff.y); 基本上已经准备好了。找到两点之间的距离。现在您需要计算每个绿色和每个红色的数量,并找出哪一对具有最小的数字。 但由于该操作很典型,它已经在向量计算的现成函数中,并被称为点积(向量的标量积)Vector2.Dot(a, b)。这项工作的公式如下: float dot = a.x * b.x + a.y * b.y; 如果将同一个向量作为两个向量传递,那就正确了diff。 float distance = Mathf.Sqrt(Vector2.Dot(diff, diff)); 这本质上是矢量计算,没有什么魔法。但这还不是全部。求矢量的长度也是一个典型的计算,并且有一个模板,称为矢量幅值(magnutude)。 float distance = diff.magnitude; 美丽 :) 但这还不是全部。我读了上面的内容b - a是为了稍后调用这个量级。全部加起来就可以一次性算完,而且还有个准备。 因此,上述查找点之间距离的整个答案可以归结为以下代码: float distance = Vector2.Distance(a, b); 我会让你自己编写代码来寻找最短距离。
勾股定理:
c2 = a2 + b2
x在这种情况下,平面上的边是沿和 的坐标差y。为了得到这个差值,你需要减去两个点的坐标。x = x2 - x1,y = y2 - y1
在 C# 中,2D 坐标由 表示
Vector2。从另一个向量中减去一个向量相当于将这些向量的值成对减去。例如,您可以获得以下内容:结果是一个
diff包含所需三角形的边的向量,必须找到该三角形斜边的长度。现在是讲解勾股定理的时间了。基本上已经准备好了。找到两点之间的距离。现在您需要计算每个绿色和每个红色的数量,并找出哪一对具有最小的数字。
但由于该操作很典型,它已经在向量计算的现成函数中,并被称为点积(向量的标量积)
Vector2.Dot(a, b)。这项工作的公式如下:如果将同一个向量作为两个向量传递,那就正确了
diff。这本质上是矢量计算,没有什么魔法。但这还不是全部。求矢量的长度也是一个典型的计算,并且有一个模板,称为矢量幅值(magnutude)。
美丽 :)
但这还不是全部。我读了上面的内容
b - a是为了稍后调用这个量级。全部加起来就可以一次性算完,而且还有个准备。因此,上述查找点之间距离的整个答案可以归结为以下代码:
我会让你自己编写代码来寻找最短距离。