我想分享一下如何在 MR 游戏中实现运行时级别系统,尤其是在遇到场景理解的壁垒时。

游戏是 Quest 上的 dodgeball,敌人会躲在真实家具后面。问题在于每个玩家的房间都不同,所以我无法事先构建任何东西。

我最终实现了以下内容:

  1. 场景理解 API 在启动时运行,分类房间锚点

  2. RoomAnalyzer 根据场景理解的输出构建一个运行时地图——出生区域、掩护点、导航边界——基于其发现的内容(地板、墙壁、沙发、桌子等)

  3. SpawnManager 根据地图读取该地图,敌人躲在真实物体后面,确保敌人与玩家之间的最小出生距离

  4. EnemyAI 运行一个状态机(寻找躲藏 /躲藏 /窥视 /凝视冻结 /戏弄 /观察队友 /逃跑 /打击中风),根据视线方向、得分变化和攻击计时器进行状态转换

我花费最长时间的就是处理坏扫描。场景理解锚点标签并不总是可靠的——稀疏房间、奇怪的光照、快速扫描——所以 RoomAnalyzer 对于标签丢失或信心度低的场景有一个 fallback 逻辑。

有没有其他人也遇到这个问题?我很好奇人们在扫描数据不干净时使用的方法。