一直在为第三人称游戏开发脚步音效系统,终于实现了我满意的效果。相比于手动标记每个表面,我使用了Physics.Raycast向下射线每一步采样脚下的纹理,然后通过ScriptableObject查找表来确定合适的音频片段。

酷的是,它能处理混合地形纹理。采样击中点的主要纹理权重,然后在权重足够接近时切换两组音频片段,走在草地上转到砾石上时会自然过渡,而不会跳跃。

性能上来说,它相当轻量。射线只在脚步动画事件触发时发射,不是每一帧,所以即使有大量NPC使用同样的系统,也不会很贵。

我还在尝试解决以下问题:是否将表面数据烘培到自定义组件中 mesh collider 上的非地形对象上,还是仅仅依赖于物理材质。还在思考是否纹理到表面映射的方法是否能适应 asset 列表的增长。

有没有人尝试类似的解决方案?我很想知道大家如何处理动态表面检测而不使调试器变成噩梦般的东西。总是寻找更简单的设置方式。