关于 fps-shooter
面向第一人称射击游戏开发者的组合式设计技能,涵盖瞄准射击循环、射击模型、武器手感与战斗系统,以及击杀时间、后坐力和散布等参数调校。
主要功能
- 01第一人称控制器与摄像机
- 02射线检测与投射物射击
- 03武器、弹药与装填
- 04敌人 AI 与战斗反馈
- 05击杀时间、后坐力与散布调校
适用场景
- 01规划竞技场或战术 FPS
- 02选择射线检测或投射物模型
- 03调节武器杀伤力与后坐力
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill fps-shooter安装后在 Claude Code 中输入/fps-shooter确认已加载。
附带文件references/shooting-and-feel.md
详细介绍
FPS Shooter
第一人称射击游戏的实践指南——视角与移动控制器、射击模型、武器手感和战斗。这是一项组合式技能:将 3D 控制器、输入和 AI 整合为射击游戏。它不会重新讲解 3D 节点或射线检测,而是定义射击模型和手感调节参数(TTK、后坐力、散布),这些因素决定枪械是否好用。
适用场景
- 构建核心操作是瞄准并射击的第一人称游戏时使用——竞技场射击游戏、战术 FPS、PvE 射击游戏、复古射击游戏。
- 需要决定使用即时命中还是投射物,或调整击杀时间、后坐力、散布或瞄准手感时使用。
不适用场景: 第三人称或 2D 射击 → 沿用此处的射击模型,但根据相应游戏类型构建摄像机和控制器。带防御塔的波次生存游戏 → tower-defense。
摄像机或角色身体本身请使用 godot-3d-essentials / unreal-cpp-gameplay。
核心循环
扫描 → 锁定目标 → 瞄准并开火 → 确认击杀(反馈)→ 重新部署 / 装弹 / 推进。 整个体验都取决于瞄准并开火这一微循环是否干脆利落:视角响应灵敏、命中反馈清晰、敌人死亡一目了然。
必备系统
- 第一人称控制器 — 移动(WASD/摇杆)+ 鼠标/摇杆视角控制、重力、跳跃/蹲伏。
- 摄像机 — 眼睛高度视角、可配置的 FOV 和灵敏度、后坐力抖动。
- 射击模型 — 即时命中射线检测和/或生成投射物;反馈统一走一条命中路径。
- 武器 + 弹药 — 伤害、射速、弹匣、装弹、切换武器。
- 生命值 + 伤害 — HP、命中/爆头倍率、死亡;玩家和敌人共用此模型。
- 敌人 AI — 感知 → 警戒 → 攻击 → 搜索;掩体和反应延迟(
game-ai)。 - 反馈 — 命中标记、撞击贴花/粒子、命中音效、屏幕震动、击杀确认。
- 目标 — 射击之外要做什么:清剿、占领、生存、护送。
设计参数
| 参数 | 效果 | 合理默认值 |
|---|---|---|
| 击杀时间(TTK) | 致命性、容错度 | 将伤害 × 射速 × HP 一起调整(参考资料)。 |
| 即时命中还是投射物 | 瞄准技能类型 | 即时命中 = 快速甩枪;投射物 = 预判/闪避。 |
| 伤害衰减 | 限制射程 | 约 20 m 内伤害全额,到约 60 m 降至最低值。 |
| 爆头倍率 | 技能奖励 | 约 1.5–2.0×。 |
| 后坐力模式 | 可学习的枪口跳动 | 固定模式优于纯随机。 |
| 散布(扩散) | 抑制激光般的精准度 | 首发精准;持续射击时散布增大。 |
| 射速 / 弹匣 / 装弹 | 节奏、空档 | 装弹 = 易受攻击的时间窗口。 |
| 鼠标灵敏度 / FOV | 舒适度、可读性 | 始终将两者作为选项提供。 |
| 瞄准辅助(手柄) | 保持控制器操作的公平性 | 在目标附近提供磁吸/减速。 |
模式
1. 即时命中射击(即时射线,主力方案)
# Pseudocode. Cast from the camera; first hit takes damage scaled by range + headshot.
direction = apply_spread(camera.forward, current_spread)
hit = raycast(camera.world_position, direction, max_dist=RANGE, mask=SHOOTABLE)
if hit:
dmg = base_damage * falloff(hit.distance)
if hit.is_head: dmg *= HEADSHOT_MULT
hit.actor.take_damage(dmg)
spawn_impact_fx(hit.point, hit.normal) # decal + sound + hitmarker
2. 投射物射击(可闪避,需预判目标)
# Pseudocode. Spawn a moving body; it deals damage on its own collision.
p = spawn(projectile_scene, at=muzzle.world_position)
p.velocity = camera.forward * PROJECTILE_SPEED
p.on_hit = lambda other, point: (other.take_damage(base_damage), explode_fx(point))
p.lifetime = RANGE / PROJECTILE_SPEED # despawn so shots don't live forever
3. 击杀时间(将三项参数一起平衡)
# Pseudocode. TTK falls out of HP, per-shot damage, and fire rate — tune as one system.
shots_to_kill = ceil(target_hp / damage_per_shot)
ttk_seconds = (shots_to_kill - 1) / fire_rate_per_second # first shot at t=0
常见问题 / 失败模式
- 视角控制与帧率绑定,或未按
dt缩放 → 灵敏度会随 FPS 变化。视角控制应使用原始鼠标增量;移动积分则使用dt(参见physics-tuning)。 - 后坐力/散布完全随机 → 手感难以控制且不公平。使用可学习的后坐力模式;确保首发精准。
- 即时命中没有伤害衰减 → 手枪也能跨越整张地图狙击。添加基于距离的伤害衰减。
- 没有命中反馈 → 玩家无法判断射击是否命中。始终显示命中标记、撞击特效,并提供明确的击杀确认。
- TTK 不匹配 → 过低会让人觉得反应时间太紧且不公平;过高则会让敌人感觉像海绵。将伤害、射速和 HP 作为一个系统一起调整(模式 3)。
- 多人游戏中信任客户端 → 会导致作弊和“我明明先开枪”的争议。将权威控制保留在服务端;使用延迟补偿(参考资料),并将网络代码交给引擎的多人游戏技能处理。
- 没有 FOV / 灵敏度选项 → 会导致晕动症和无障碍访问问题。始终提供这些选项。
组合(用这些技能构建)
- 控制器 + 摄像机: 使用
godot-3d-essentials(Godot),或unreal-cpp-gameplay/unreal-blueprints;Unity 使用unity-physics+ 角色控制器。 - 输入: 使用
input-systems(或unreal-enhanced-input)处理视角/移动、按键重映射和手柄瞄准辅助。 - 射击物理: 使用
godot-physics/unity-physics处理射线检测和弹丸碰撞。 - 敌人: 使用
game-ai搭配unity-navmesh/unreal-behavior-trees/ Godot 导航。 - 摄像机与手感: 使用
camera-systems处理视野(FOV)/后坐力冲击和视角平滑;使用game-feel处理命中定格、屏幕抖动和冲击表现。 - 润色: 使用
audio-design处理武器/冲击音效;使用shader-programming制作枪口/冲击视觉特效。 - 流程: 使用
prototype-fast在制作内容前验证瞄准手感。
参考资料
- 有关即时命中与弹丸的权衡、伤害衰减、后坐力/散布、TTK 计算、命中判定/延迟补偿和敌人 AI 状态,请阅读
references/shooting-and-feel.md。
评论
支持 Markdown