【问题标题】:Length of a segment inside a solid in Unity3DUnity3D中实体内段的长度
【发布时间】:2015-02-10 07:03:33
【问题描述】:

我正在使用 Unity3D,我的情况如下:

  • 我有(至少)3 个游戏对象,A、B 和 C。
  • 我知道 A、B 和 C 的位置和旋转。
  • 我知道 C 的大小。

我需要从 A 射线投射到 B。这条射线穿过 C,我需要知道 C 内部的线段的长度。使用三角形相似度标准,如果我在 2D 中,我可以得到我想要的然而,空间:

  • 我在 3D 空间中。
  • 草图中的矩形可以是球体、立方体或平行六面体。
  • 我需要使用 raycast 方法而不是 linecast,因为我需要获取有关我击中的实体的更多信息(实际上我使用的是 raycastall 方法)。
  • A 和 B 之间可能有不止一个实体(更多 C),我需要获取每个人的段长度。

我做了这个简单的草图来说明我的情况,基本上我需要得到红色段的长度。

我不介意获取 Unity 的代码,我只需要一些有关公式的帮助,一旦我有了它,我就可以自己编写脚本,但是如果 Unity 提供了一种简单的方法来获取它,我会很高兴了解如何去做。

谢谢。

【问题讨论】:

  • 我认为使用旋转和位置找到不同几何形状的封闭公式会变得非常复杂。我建议坚持使用光线/线播。此外,quboids 和 spheres 应该由统一有效地处理,如果这部分不是 100% 关键,并且这是您的应用程序一直在做的唯一事情,那么可能很难提高效率。我还没有使用过统一(尚未),但根据this,linecast 也可以返回 raycast 命中类型。否则,你可以投两次,看看效果如何……

标签: math 3d unity3d formula trigonometry


【解决方案1】:

我可能没有正确理解这一点,所以这可能是不正确的。难道你不能只是Raycast它然后在对象C的OnTriggerEnter()OnTriggerExit()处得到RaycatHit.point。将这两个点作为Vector3s,你可以只从另一个点减去一个或使用Vector3.Distance

【讨论】:

  • 感谢您的回答!你能再解释一下吗?阅读 Unity 文档,似乎光线投射无法触发 OnTriggerEnter / Exit 回调。阅读您所写的内容后,我想到的是,我可以从 A 向 B 触发一个不可见/透明的游戏对象,这将触发放置在 C 上的脚本中的上述回调,这样它应该可以工作,但我不会在这里使用任何光线投射。我错过了什么吗?
  • Physics.Raycast 应该能够触发碰撞器。您的解释正是我的意思,除了不是“不可见/透明的游戏对象”,它是 Raycast。但是,如果我对 Raycast 触发器有误,那么您可以做的是检查 Raycast 是否击中了什么东西。如果确实如此并且某物是对象 C,则获取 hit.point 信息并以相同的方式使用它。我链接的文档有示例代码,这应该是一个很好的起点。
  • 再次感谢,我明天试试,我会告诉你的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2015-05-24
相关资源
最近更新 更多