【问题标题】:How to get shortest distance between two objects?如何获得两个物体之间的最短距离?
【发布时间】:2021-07-31 09:29:08
【问题描述】:

我有两个大小差异很大的对象。我想找到这些物体之间的最短距离。例如,如果我在墙前有一把小椅子。我想要椅子和墙壁之间的距离。我尝试使用 Vector3.distance,但它使用世界坐标进行计算。我尝试使用对撞机来实现这一点,因为我在某处读到它是解决方案,但不清楚如何去做。有人可以帮忙吗?

我添加了一张图片来说明我想要什么。红线是我使用 Vector3.Distance 时得到的距离,但我想要的距离是绿线。如果游戏中有很多物体,我怎样才能得到我选择的两个物体之间的最短距离。

【问题讨论】:

  • 用于两个对象枢轴或中心之间的距离Vector3.Distance。您可能还会发现有用的 Collider.ClosestPonitCollider.ColsestPointOnBounds。对于其他特定的“最短距离”,您可能需要更好地解释您想要什么,并可能自己编写代码。
  • @derHugo 我检查了它,但它特定于两个对象。如果有意义的话,我希望它更通用。
  • @rustyBucketBay 我尝试了最接近点森边界,但我不明白如何实现它。如果可能的话,我能找到两个物体沿一个轴的距离吗?

标签: c# unity3d


【解决方案1】:

在你的情况下,你可以使用this,你需要传递yourObject位置作为第一个参数和wall.up作为第二个参数(如果你的墙变换指向yourObject边)。然后,您将在墙上收到一个点,该点垂直于墙壁投影在墙上。获取此点并使用Vector3.DistanceyourObject 位置到投影点。

var pointOnWall = Vector3.ProjectOnPlane(yourObject.position, wall.up);
var closestDistance = Vector3.Distance(yourObject.position, pointOnWall);

【讨论】:

  • 由于某种原因,这给了我物体和世界原点之间的距离
  • 它似乎仍然给了我墙中心和物体之间的距离。我不知道该怎么办。
  • 请用以下代码计算 poitnOnWall 替换: var pointOnWall = wall.TransformPoint(Vector3.ProjectOnPlane(yourObject.position, wall.up)); Transform.TransformPoint 将位置从本地位置转换为世界位置。 ProjectOnPlane 返回墙上的本地位置。抱歉误导。
  • @s-h-s pastebin.com/3WbzWmUg 将其附加到立方体上,在场景视图中,您将看到计算结果。将closeDistance 设置为大于 cude 的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2013-02-15
相关资源
最近更新 更多