我正在工作第三人称 parkour 系统,并且想描述一下它的实现细节。 我遇到的具体挑战是“动画与几何体不匹配”的问题,这是这种系统常见的问题。 我最终解决的方法是创建一个三阶段评估系统。 第一阶段是一个检测阶段,使用两个光线检测障碍物。 一个光线检测障碍物在前方的角色,另一个光线检测从第一个光线检测到的击中位置下方的水平表面。 这样,通过使用两个光线检测,我可以得到“前方有障碍物”和“障碍物的高度”。 第二阶段是一个决策阶段,针对每种可用 parkour 动作(步上,越过,攀爬,栅栏跳跃)都有一个高度范围,它可以使用,一个可选的标签要求(为了攀爬特定的墙),以及一个动画。 然后,对于给定的情况,它简单地遍历所有动作,直到找到可用的动作。 当需要添加新的动作时,我只需要创建一个新 ScriptableObject,不需要修改任何代码。 第三阶段是校正动画。 我认为这是一个有趣的部分,因为它使用 Animator.MatchTarget 来为攀爬动作制作动画,通常用于特定的高度的栏杆。 它通过在动画曲线的末尾设置一个目标手部位置,然后将其重写为匹配目标来实现。 该目标匹配目标的障碍物上的手部位置。 因为校正目标是单个身体部位(手或脚),所以它允许更好的运动,而不是脚或手滑过几何体。 我还实现了一个使用相同的设计模式的楼梯攀爬系统,因为当需要在运动中有自定义逻辑(例如上下楼梯)并返回到正常的 Animator 控制时,它非常合适。 仓库(完整源代码,MIT 许可):https://github.com/prototypesDeprakash/ThirdPerson_ParkourSystem_with_TargetMatching 如果有人正在面临类似问题,欢迎提问关于光线检测设置、 ScriptableObject 动作模式或目标匹配调节(开始/结束时间窗口,权重遮罩)。