【问题标题】:Calculate distance between two objects not located together with identical transforms?计算两个不具有相同变换的对象之间的距离?
【发布时间】:2019-08-16 02:07:22
【问题描述】:

Image link (for those who don't see the inline image)

我正在尝试计算对象之间的距离,(使用 Vector3.Distance 方法尝试位置和 localPosition)但是,似乎有问题。

正如您在图像中看到的那样,场景中的两个对象不在同一位置,但是,它们的变换讲述了不同的故事 - 它们具有完全相同的变换信息(位置、旋转和缩放)。

确保这里遗漏了一些简单的东西,但是,如何计算两个不在同一位置但具有相同变换的对象之间的距离?

【问题讨论】:

  • 就个人而言,我认为简洁地描述您的问题而不是嵌入视频更容易消化问题。在我理解我应该看到的内容之前,我必须经过几个循环。话虽如此,我对 Unity 并不熟悉,但其他系统具有绝对位置和变换的概念,其中变换是相对于绝对位置应用的。 Unity有这样的概念吗?
  • transform.position 是绝对的。 transform.localPosition 是相对的。
  • 他的问题是他的一个模型的枢轴偏离了质心......
  • 您所描述的效果符合预期,从您的视频中我们可以清楚地看到两个对象的位置相同。我们需要您的生成算法来帮助您。
  • 如果您以编程方式生成对象,那么该代码可能是相关的,应该包含在问题中。您可能不关心“意见”,但就目前而言,您的问题并不完整,恕我直言,这将导致猜测。

标签: c# unity3d


【解决方案1】:

以下解决方案适用于原帖中描述的问题,不适用于以编程方式生成的网格

我看到其中一个没有以枢轴为中心。

将您的两个对象都设为空游戏对象的子对象,这样您就可以相对于它们的父对象移动它们。这就像改变他们的支点一样。

根据父游戏对象计算距离。

示例:

一个空游戏对象的父对象1。移动对象 1。请注意,父级的变换不会改变。因此,您只需移动 object1 以使其中心与父变换对齐。然后,从那里创建一个预制件。这是你的新对象1。

对您想要控制其枢轴的任何对象执行此操作。

替代方案: 如果上述解决方案不适合您的需求,实现您想要的一种简单方法是根据transform.renderer.bounds.center 计算距离

然后您的计算将基于对象边界的中心,而不是其实际位置,从而消除了枢轴问题。

【讨论】:

  • 请清洁您的 cmets。实施建议的替代解决方案 -GetComponent.bounds.center 提供了看起来是对象之间的实际距离。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多