拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude-of-Duty AI敌人拆解:导航网格寻路、感知系统、掩体选择与小队协同战术全解析

Claude-of-Duty AI敌人拆解:导航网格寻路、感知系统、掩体选择与小队协同战术全解析 Claude-of-Duty AI敌人拆解导航网格寻路、感知系统、掩体选择与小队协同战术全解析【免费下载链接】Claude-of-DutyA Call of Duty-quality FPS in Three.js, built from a single prompt.项目地址: https://gitcode.com/gh_mirrors/cl/Claude-of-DutyClaude of Duty 是一款用 Three.js 纯代码构建的使命召唤级第一人称射击游戏FPS——没有任何美术素材贴图、模型、动画、音效全部程序化生成。它的ai子系统让敌兵会绕路、会找掩体、会打掩护。本文拆解其导航网格寻路、感知系统、掩体选择与小队协同战术四大核心看看这些有脑子的敌人是怎么用代码写出来的。 AI 子系统全景谁负责什么AI 子系统位于 src/ai/核心文件分工非常清晰文件职责index.jsAiSystem总入口启动构建导航、事件总线接线、每帧调度与性能预算nav.jsNavGrid可走通性网格 A* 寻路 CoverMap掩体点提取与评分agent.js单个敌人感知、状态机、移动避障、射击、受击与死亡布娃娃squad.js小队协同探头令牌、目击通报、侧翼限制、手榴弹配额rig.js / animator.js25 骨骼骨架与分层动画IK 脚部接地、瞄准、受击敌人共三种变体vanguard先锋、irregular游击、breacher破门手由 populate() 在游戏启动时派驻成2 个小队 × 3 人巡逻路线直接从世界生成器自己的出生点里抽取。️ 导航网格寻路从物理世界采样出一张地图传统 FPS 需要美术/关卡师手工绘制导航网格而 Claude of Duty 的地图本身就是代码生成的——它选择直接从物理引擎的 BVH 采样出一张可走通性网格见 NavGrid向下发射射线找到地板高度向上发射射线检查站立净空1.78 m不够就降级为仅蹲姿可走胸口高度向四个侧向做短探针3 个以上被挡判定为肩宽不足、标记为阻挡地板法线决定坡度超过 46° 不可走。网格以 0.8 m 为单元格实际规模约221 × 221 格构建耗时约 224 ms全部在启动阶段完成见 _buildNav()。每个格子除了可走/不可走还记录地板高度和封闭度enclosure用于后续让敌人贴墙走、以及掩体评分。寻路本身是教科书级的A* 算法findPath()但有两个关键细节让它像人走成本函数带地形偏好上坡按|Δy| × 2.2加价、只可蹲行的格子加价 1.6 倍、贴近墙面的格子加价 0.25——敌人会偏好平地、避开蹭墙禁止切角斜向移动时要求两个正交邻格都可走防止穿墙拉绳优化String PullingA* 出的原始路径是格子阶梯状_stringPull() 用可行走直线测试贪心地合并路点——把阶梯拉成贴墙的折线敌人绕弯不再一格一格地扭动。此外还有每帧 A* 预算单次求解约 0.5–1.1 ms若同一帧全队开战会一次要 6 次求解。系统把预算设为 pathsPerFrame 2超出部分顺延到下一帧——60 fps 下玩家根本察觉不到却把一次 5 ms 的同帧卡顿摊平了。 感知系统敌人如何看见和听见你感知被刻意设计成不完美的——这是像人的核心Agent._sense()感官参数效果视觉58 m 视距、100° 视野锥目标必须入锥 穿过物理 BVH 的视线检测反应延迟正前方近距离最快视野边缘最慢awareness从 0 累积到 1 才确认目标最后已知位置失去视野 6.5 s 后放弃敌人会搜索你待过的地方而不是你现在的位置听觉枪声 90 m脚步奔跑 24 m / 步行 11 m只给出方向会转头、会警戒但不会凭空开枪压制子弹近距离擦身 3.2 m/ 爆炸压制值累积 → 缩颈、卧倒、射速散布变大两个值得品味的设计听觉只给方向不给定位hear() 里注释写得很直白——枪声只能让你转过头去绝不送一次免费击杀。所以开火后你会看到附近敌人朝你的大致方向张望而不是瞬移到你面前中弹会溯源applyDamage() 会沿子弹入射方向反推 14 m 作为新最后已知位置——被爆头的瞬间敌人就知道你在哪。感知事件统一由 AiSystem 的事件接线 分发监听weapon:fire枪声、bullet:impact弹着点、player:footstep脚步、explosion爆炸。这意味着跑动会被听见24 m蹲走只有 11 m——潜行是有真实收益的。️ 掩体选择一个评分函数决定站哪打掩体不是手摆的而是从同一张导航网格推导出来的CoverMap每个紧邻阻挡物的可走格都会沿 8 个方向射线探测命中后生成一个掩体点记录朝向保护来自哪个方向dx, dz高度等级high能挡住站立射击还是蹲姿掩体——用膝高/胸高两次射线判定peek 偏移横向探出掩体边缘、仍保有视线的射击位。战斗中的选址由 pick() 打分权重顺序很有讲究评分项规则遮挡有效性阻挡物必须真的位于敌人与威胁之间投影 0.25 直接淘汰距离威胁偏好 7–30 m 区间过近/过远按不同斜率扣分移动成本离你越远的掩体越不优先换点成本 12 m vs 首次选点 26 m防扎堆与任何队友距离 3.2 m 按距离扣分占用Claim每个掩体点同一时间只能被一个敌人认领换点即释放开火动作叫探头射击循环到位后敌人按 1.1–2.4 s 周期决定探/缩探头时先由 peekOffset() 左右两侧各试一次视线挑看得见你的那侧侧身露出。若 2.2 s 内没摸到你还会朝最后已知位置打压制火力——就算瞄不准也敢开枪。细节同样讲究不卡死如果选中的掩体实际走不过去被不可走区域隔断敌人会在原地站 0.85 s 没到点就放弃该掩体、立即重选而不是抱着一张去不了的路径发呆。 小队协同让 4 个人别像一个四头怪squad.js 的注释一句话点题The squad exists to stop four individually-sensible soldiers from behaving like one four-headed idiot。四套机制探头令牌全队同时探头的人数上限 ≈ 成员数的一半peekTokens每 1.1–2.3 s 轮换一次持有人——敌人会轮流探头而不是整齐划一地一起露脸目击通报Call-out一人确认看到你全队在 4 s 窗口内共享你的位置但带 0.9–1.7 s 的喊话延迟且只是给一个待检查的方向update()侧翼限制同一时间只允许1 人绕后且前提是至少还有一个队友在正面交火牵制canFlank()。侧翼点取你方向的垂直偏移 8–15 m跑 7 s 内到不了就折返手榴弹配额小队级冷却 14–26 srequestGrenade()防止全队同时砸雷——投掷条件本身也很苛刻距离 8–26 m、1.5 s 内见过你、且拿到小队许可。⚙️ 状态机总览一个敌人的完整人生Agent 的行为状态机只有 8 个状态却覆盖了完整的战斗生命周期状态进入条件行为速写idle/patrol初始 / 出生点附近沿巡逻点慢走1.35 m/salert听见枪声/脚步/中弹冲向最后已知位置1.5 m/s12 s 无果则归位combat确认目标选掩体 → 探头射击 → 压制/侧翼/换点suppressed压制值 1.15卧倒缩颈不开枪压制消退后回战斗flank有队友牵制 小队许可全速4.4 m/s绕到侧翼retreat血量 34 且交火 1.5 s向远离目标 9 m 处撤退回血 45 以上再投入dead血量归零骨骼骨架原姿态交接给布娃娃求解器带子弹冲量移动层还有两个保命机制局部避障对队友做径向推开 切向偏置按 id 奇偶打破正面死锁翻越矮沿检测到前方有低障碍、头部高度无障碍时播放 vault 动作翻过去卡住超过 1.1 s 则强制重寻路。⚡ 性能暗线看不见的敌人降薪但不下岗_updateRelevance() 每帧判断每个敌人这帧有没有可能影响任何像素包围球外扩 4 m与相机视锥相离、且其太阳阴影扫掠体积也不落在视锥内时判定为无关——此时动画按1/3 频率求值并移出阴影级联但模拟、射击、发声照常进行。配合启动期完成导航网格/掩体构建、角色着色器预热AI 子系统在 Retina 分辨率下把 28–30 fps 的预算守得很稳。 快速上手本地跑起来看效果npm install npm run dev # 打开 http://127.0.0.1:5173点击画布锁定鼠标后WASD 移动、鼠标瞄准、左键射击、Shift 冲刺、Ctrl 蹲伏。找一队敌人交火观察他们轮流探头、有人绕后、听到枪声后朝你跑过的位置搜索——本文拆解的感知、掩体与协同逻辑都能亲眼验证。 总结这套 AI 设计最值得借鉴的 4 点导航网格别手画地图是程序生成的就从物理世界射线采样永远与碰撞体一致nav.js寻路要带预算A* 按帧配额 失败顺延把突发重寻路的卡顿摊平到不可感知感知必须不完美视线锥 反应延迟 会衰减的最后已知位置 只给方向的听觉是敌人像人的四大支柱agent.js协同靠令牌不靠脚本探头令牌、唯一侧翼手、配额手雷——用几个计数器就能让 3 个人从三头怪变成一个小队squad.js。想了解各子系统间的接口契约与事件词汇表可继续阅读 ARCHITECTURE.md——那是所有 AI 代理协作时遵守的宪法。【免费下载链接】Claude-of-DutyA Call of Duty-quality FPS in Three.js, built from a single prompt.项目地址: https://gitcode.com/gh_mirrors/cl/Claude-of-Duty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表