首页 > 解决方案 > 攀爬系统的网格边缘检测

问题描述

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

我知道这样的事情可以通过着色器来实现,但由于它们不返回任何数据,这不是一个选择。我还有其他方法可以做到吗?即使是在网格中标记边缘而不是使用对撞机的方法也会很棒。

标签: c#unity3dvirtual-reality

解决方案


这就是我将如何做到的。这是一种自以为是的做法,不一定是最佳实践。你的旅费可能会改变。

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

  2. 分析您的网格(在运行时,例如在关卡加载期间)并拉出可抓取的边/面。这是一种方法。这些将是您攀登的导航航路点。请注意,您必须定义构成“可抓取”边缘或面的内容,对我而言,这主要取决于面方向,您可以从面法线中获得。

  3. 如果您的关卡很大或很复杂,请将这些面进一步分组到体积树结构中(八叉树、kd、帮助您定位附近边缘的东西)。

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

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


推荐阅读