我正在开发一款VR游戏,其中包含一些攀爬机制。玩家将能够抓住边缘,而我想使用动态边缘检测而不是我现在正在做的事情,这就是将碰撞器放置在我希望玩家能够抓住的边缘上。这样做需要很长时间,并且不允许生成任何程序网格。
我知道可以使用着色器实现类似的操作,但是由于它们不返回任何数据,因此不是一种选择。我还有其他方法可以做到吗?甚至一种标记网格中边缘而不使用碰撞器的方法也很棒。
答案 0 :(得分:2)
这就是我要做的。这是一个自以为是的做法,不一定是最佳做法。您的里程可能会有所不同。
除非您的等级很小,否则请忽略对撞机。他们在这里太贵了。我喜欢使用对撞机进行经典物理刚体碰撞。我发现它们始终不是步行或爬山等动机互动的最佳选择,尤其是。在Unity中,经常使用对撞机来检测简单的线平面交点是过大的。
分析您的网格(在运行时,例如在关卡加载期间)并拉出可抓取的边缘/面。 Here's one way to do it。这些将是您攀登的导航航点。请注意,您必须定义什么构成“可抓取的”边缘或面部,对我而言,这主要取决于您可以从面部法线获得的面部方向。
如果您的级别较大或复杂,请将这些面进一步分组为体积树结构(八叉树,k-d,以帮助您定位附近的边缘)。
随着玩家的攀爬,测试玩家的手和附近的可攀爬面之间的交点。只有当玩家“抓紧”他认为是可以攀爬的边缘时,您才可以依靠玩家在这里的动作并执行最耗时的测试。
在此系统下,攀爬本质上是一个微型平台。手必须从一个平台“跳下”到另一个平台,以实现进一步的垂直移动。