攀爬系统的网格边缘检测

Mesh edge detection for a climbing system

我正在开发一款 VR 游戏,其中包含一些攀爬机制。玩家将能够抓住边缘,我想使用动态边缘检测而不是我现在正在做的事情,即将对撞机放置在我希望玩家能够抓住的边缘上。这样做需要很长时间,并且不允许生成任何程序网格。

我知道着色器可以实现类似的效果,但由于它们 return 没有任何数据,所以这不是一个选择。我还有其他方法可以做到吗?即使是在网格中标记边缘而不是使用对撞机的方法也会很棒。

以下是我的做法。这是一种自以为是的做法,不一定是最佳实践。您的里程可能会有所不同。

  1. 除非你的关卡很小,否则请忘记对撞机。它们在这里太贵了。我喜欢将对撞机用于 经典物理刚体碰撞 。我发现它们并不总是最适合步行或爬山等动机互动,尤其是。在 Unity 中,经常使用对撞机来检测简单的线平面交点是多余的。

  2. 分析您的网格(在运行时,比如在关卡加载期间)并拉出可抓取的 edges/faces。 Here's one way to do it。这些将是您攀登的导航waypoints。请注意,您必须定义什么构成 "grabbable" 边或面,对我来说这主要取决于面方向,您可以从面法线获得。

  3. 如果您的关卡很大或很复杂,请进一步将这些面分组为体积树结构(oct-tree、k-d,可以帮助您定位附近的边缘)。

  4. 当玩家攀爬时,测试玩家的手和附近可攀爬面之间的交叉点。只有当玩家 "clutches" 他认为是可攀登的边缘时,您才可以依赖玩家的操作并执行最耗时的测试。

在这个系统下,攀爬本质上是一个迷你平台游戏。手必须 "jump" 从一个平台到另一个平台,以实现进一步的垂直运动。