如何在Unity中对“轨道”或模块化对象进行对齐?

8
我正在开发一个简单的游戏,用户可以放置不同但模块化的对象(例如:轨道、道路等)。
我的问题是:当一个对象靠近另一个对象时,如何匹配和放置不同的对象?
我的第一种方法是为每个模块化对象创建一个隐藏的子对象(一个盒子),并将其放置在可能放置其他对象的边界处(请参见我的示例图片),以便我可以使用那些坐标(x,y,z)来对齐其他对象。
但我不知道是否是最好的方法。

enter image description here

enter image description here

谢谢


看看Kerbal Space Program是如何组合事物的,试着想象它是如何做到的 =) - Immersive
您可以使用Transform组件在不同的对象上定义多个“捕捉点”,并使用这些Transform的位置和方向进行附加。 - Pierre Baret
你好,有更新吗? - Soleil
2个回答

3

摘要:

1.定义“吸附点”是什么

2.定义你的阈值

3.更新新游戏对象的位置

简单解释

1. 因为在一些示例中,如立方体,整个顶点可以成为吸附点,但很难定义无定形物体中的每个顶点都是吸附点。所以我想你需要一种方法来定义对象的哪些部分是“吸附点”。

@PierreBaret提出了一个简单的解决方案,即在您的变换组件上定义“吸附点”。 另一种方法是您提出的方法,创建空的游戏对象,它们将作为游戏对象上的吸附点位置。

2.在拥有这些吸附点之后,当您放置新的gameObject时,您需要定义一个阈值,只要您不希望每个对象总是吸附到最近的游戏对象。

3.因此,您定义了吸附点之间的最小距离,因此,如果您的吸附点低于该阈值,则需要更新其位置,以调整到吸附点。

视觉表现:

enter image description here

注意:阈值距离仅显示当前正方形的4个顶点中的一个阈值检查,但这个深蓝色圆应该复制3次,每个红色正方形的绿色吸附点都需要做一次

当然,这种方法似乎很昂贵,您可以进行一些改进,例如在游戏对象之间设置第一个阈值,如果gameObject在此阈值内,则检查吸附阈值距离。

希望有所帮助!


2

任意对象/模型和可变形模型的方法

[A] 物理方法会考虑两个对象的所有表面,您可能需要使用表面之间的点积来检查对象是否重叠。这会增加一些计算成本,但并不会太糟糕。如果这里没有涉及到匹配,您将能够添加匹配特征(请参见[B])。然而,这是处理非预定义模型可变形模型的唯一方法。

匹配简单和复杂模型的方法

[B] 吸附点是一个好东西,但它本身还不足够。我认为您需要让一个对象具有:

  • 一个稀疏表示(例如,从复杂的定向球到立方体),
  • 并放置关键吸附点
  • 极性颜色标记,并最终定向(即定向吸附点);例如,在铁路的情况下,您会希望铁路与{+}配对并禁止与{-}配对。在更复杂的对象或具有多个定向(例如,表面的2个面,但只有一个是对象配对的候选面)时,您将需要多于2个极性,但每个匹配候选表面特征需要3种不同的颜色(或任何枚举)。您需要3种不同的颜色来确保有唯一的3D空间配置。您创建了一个在化学中称为对映异构体的东西。
  • 当定向表面不适用时,您还可以使用点对特征来描述两个定向点的相对位置和方向。

参考文献

其中一些是计算机视觉论文或书籍摘录,但它们阐述了实现我在答案中开发的算法和概念。

  1. 全球模型,局部匹配:高效和稳健的三维目标识别, Drost等

  2. 三维模型与匹配


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接