algorithm - 如何在 Unity 中对齐 "tracks"或模块化对象?

标签 algorithm unity3d

我正在开发一个简单的游戏,用户可以在其中放置不同但模块化的对象(例如:轨道、道路等)。

我的问题是:当一个物体靠近另一个物体时,如何匹配和放置不同的物体?

我的第一个方法是为每个模块对象创建一个隐藏的子对象(一个盒子),并将它放在可以放置其他对象的边框中(参见我的图像示例),这样我就可以使用该坐标(x ,y,z) 对齐其他对象。

但我不知道这是否是最好的方法。

enter image description here

enter image description here

谢谢

最佳答案

总结:

1.定义什么是“捕捉点”

2.定义你的阈值

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

小解释

1. 所以我想你需要一种方法来定义对象的哪些部分是“捕捉点”。 因为它们在某些示例中可以很清楚,例如立方体,其中整个顶点可以是捕捉点,但很难定义无定形对象中的每个顶点。

一个简单的解决方案可能是@PierreBaret 公开的解决方案,其中包括在您的转换组件上定义“捕捉点”。 另一种是您提议的,创建空的游戏对象,这些对象将充当游戏对象上的捕捉点位置。

2.有了这些捕捉点后,当你放下你的新游戏对象时,你需要定义一个阈值,只要你不希望每个对象都捕捉到最近的游戏对象。

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

视觉呈现:

enter image description here

注意: 阈值距离仅显示正方形中第 4 个顶点上的 4 个当前阈值检查中的一个,但这个深蓝色圆圈应该再重复 3 次,一次用于红色方 block 的每个绿色捕捉点

当然这个方法看起来很昂贵,你可以做一些改进,比如在游戏对象之间设置一个第一个阈值,如果游戏对象在这个阈值内,然后检查捕捉阈值距离。

希望对您有所帮助!

关于algorithm - 如何在 Unity 中对齐 "tracks"或模块化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122220/

相关文章:

algorithm - 如何证明堆中最坏情况下的反转次数是Ω(nlogn)?

algorithm - 拜占庭协议(protocol)的一个子案例(4个流程,指挥官是叛徒)

c# - 在纹理上调用 Resources.Load 不起作用

c# - 创建类实例有多昂贵? (性能考虑)

unityscript - 我可以在 Unity 5 中知道谁实例化了对象吗?

algorithm - 数组越界 F#

c++ - 在 C++ 中评估数学表达式

c# - 如何使用 unity 3d 获取谷歌访问 token ?

c# - 在非触摸支持的计算机上统一编程触摸

algorithm - 处理评级系统的最佳方式