wd/.codestable/epics/fps-gunfeel-training.md
2026-09-12 22:03:43 +08:00

50 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
status: proposed
created: 2026-09-12
work: ../work/epic-fps-gunfeel-training.md
---
# FPS 枪感训练场原型
## 起点与目标
长期愿景是 Unity Windows 战术 FPS。本 Epic 交付单人灰盒训练场,验证移动、停稳、短点射及动态靶训练循环。
## 范围与非目标
一把自动步枪、灰盒场景、静态靶、横向往返与随机换向动态靶、命中反馈、统计及 Windows x64 可执行构建。
不包含固定弹道记忆/压枪系统、联网、英雄技能、经济、攻防模式、成品美术、多武器与换弹;原型无限弹药。
## 共享语言与概念边界
- 短点射是玩家在全自动步枪上手动按下再松开,每组 1–3 发,不是自动三连发模式。
- 后坐力是镜头上抬;散布是弹道相对当前瞄准方向的随机角度偏差。持续射击增加二者,停火恢复精度,不要求学习固定弹道。
- 停稳指松开移动输入后平面速度低于 0.1 m/s。
- 有效命中指一次射线首次击中靶体,一枪最多一次;先击中遮挡物时不计靶体命中。
- 场景示例:移动时准星扩张,松开 WASD 停稳后恢复移动精度惩罚;左键按住连续射击增加散布,松开后恢复,命中靶体才反馈并计数。
## 关键决策
- DEC-1:沿用用户确定的单人训练场、短点射、快速停稳和两种动态靶方向。
- DEC-2:纠正旧稿误记,以短点射控制精度取代固定后坐力模式。
- DEC-3:本轮提议的可调初始验收基线:移动 5 m/s,停稳不超过 100 ms,射速 600 RPM,停火 250 ms 后恢复基础散布;静止半角 0.15°,移动至少 1.5°,连射 10 发后至少 2°。owner 批准本修订后,这些值即为本 Epic 冻结的默认验收阈值;允许运行时调参,但测试始终使用冻结默认值。更改通过阈值须走契约变更;后续 Epic 可重新平衡。
- DEC-4:拟用 Unity 6 LTS、内置渲染管线和 Input System;ITEM-1 固定实际可用的 Editor 精确版本及包版本。
## 验收标准
- WASD 移动、鼠标瞄准、左键按住连射/松开停火;停稳符合 100 ms 阈值,移动准星扩张。
- 散布测试不包含镜头后坐力:使用固定朝向的虚拟枪口和正前方 20 m 垂直平面,RMS = sqrt(mean(x²+y²)),单位 m。种子 42,每个对照重置同一弹道随机流和精度状态。基础对照各采 1000 个独立首发,每发重置射击热度;移动组预先保持 5 m/s 一秒,静止组速度为零;移动 RMS 至少为静止的 5 倍。点射/扫射对照均静止、共 300 发:点射每组三发,组内间隔 100 ms,上一组末发后停火 250 ms 再发下一组;扫射连续每 100 ms 一发。除开始外不人工重置精度,仅按真实停火逻辑恢复;点射 RMS 不超过扫射的 60%。镜头后坐力另做实际输入体验验证。另直接断言散布模型的锥体半角:静止首发 0.15°(误差不超过 0.001°)、移动首发至少 1.5°、连续第 10 发至少 2°;以 r=20*tan(半角) 换算采样支持域半径,逐发验证采样不越出模型锥体,避免用随机样本最大值推断下限。
- 命中显示标记并使靶体闪烁;未命中不触发。统计发射数、命中数、命中率;零发显示 0%,重置清零。
- 往返靶左右各 3 m 范围、默认 2 m/s,到边界反向。随机模式每 0.5–1.5 s 随机选方向,边界强制反向,使用独立于弹道的目标随机流、均匀时间分布和等概率左右选择,初始向右;边界反向不重置既定随机倒计时,越界位移反射回合法区间。R 重置到中心并复位随机种子。往返断言:默认参数 1 s 时 x=2 m、2 s 时 x=2 m;随机模式同种子同时间步长重置后轨迹一致,固定步长模拟 10 分钟不越界。具体 RNG 算法在实现中固定并测试,不要求跨算法轨迹一致。
## 子项契约
- ITEM-1(cs-feat):工程、灰盒场景和构建入口;无依赖。固定 Editor/包版本及 Windows x64 配置;干净检出导入编译无错误,Play 进入含地面、光照、摄像机的场景;构建脚本输出 Builds/Windows,日志及测试证据输出 Artifacts,生成物不入库。Editor/激活缺失属于阻塞,不能以静态检查代替运行。
- ITEM-2(cs-feat):移动、视角、精度状态与准星;依赖 ITEM-1。WASD、可调鼠标灵敏度、俯仰限制、光标锁定;Esc 暂停释放光标、点击继续;暂停禁移动/射击。验证停稳阈值、地面墙体不穿透;速度驱动精度状态,真实射击验证归 ITEM-3。
- ITEM-3(cs-feat):步枪、最小静态靶与反馈;依赖 ITEM-2。实现连射、精度恢复、镜头后坐力和上述散布比较。唯一射击结果携带序号、命中对象/点、有效标记和时间,ITEM-3 只发布结果并负责即时反馈,绝不写统计字段;验证射线遮挡、暂停禁射、不同帧率射速与命中反馈。
- ITEM-4(cs-feat):动态靶、会话及统计;依赖 ITEM-3。模式切换、速度滑条 0.5–4 m/s(步进 0.5,默认 2)、固定种子;在 0.5、2、4 m/s 下验证边界及换向,R 恢复默认 2 m/s 并重置目标;R 重置统计、目标和武器精度;暂停冻结目标及会话;ITEM-4 是统计唯一写入者,每个射击序号仅消费一次;R 清空计数及去重状态,射击序号在进程内不复用;暂停不发布或消费射击结果。HUD 展示上述统计、退出按钮。验证两种动态模式边界、切换、重置和计数。
## 最终交付索引
实施后记录项目入口、构建脚本、运行说明、测试证据和 Windows 产物路径。
## 整体验收
四项完成后从干净检出用固定 Editor 构建 Windows x64 至 Builds/Windows。真机启动可执行文件进入训练场,验证移动、瞄准、停稳、点射/扫射、静态命中、两种动态模式、统计、重置、暂停/继续和退出,无阻断错误。证据存 Artifacts 并由游标引用。独立最终验收审查后由用户体验并最终接受枪感。
## 遗留风险
- 常用目录、PATH、卸载注册表尚未发现 Unity;Editor、构建组件与许可证需要核实解决,缺失时不能宣称运行通过。
- 本轮数值是待确认的初始参数;量化测试不能取代用户最终主观枪感验收。
- 联网、服务器权威及延迟补偿属于后续 Epic,不预建框架。