mcpField
F
fps-shooter

fps-shooter

github.com/gamedev-skills开发5.4k6.8k 次安装今天更新
代码仓库

关于 fps-shooter

面向第一人称射击游戏开发者的组合式设计技能,涵盖瞄准射击循环、射击模型、武器手感与战斗系统,以及击杀时间、后坐力和散布等参数调校。

主要功能

  1. 01第一人称控制器与摄像机
  2. 02射线检测与投射物射击
  3. 03武器、弹药与装填
  4. 04敌人 AI 与战斗反馈
  5. 05击杀时间、后坐力与散布调校

适用场景

  1. 01规划竞技场或战术 FPS
  2. 02选择射线检测或投射物模型
  3. 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。

核心循环

扫描 → 锁定目标 → 瞄准并开火 → 确认击杀(反馈)→ 重新部署 / 装弹 / 推进。 整个体验都取决于瞄准并开火这一微循环是否干脆利落:视角响应灵敏、命中反馈清晰、敌人死亡一目了然。

必备系统

  1. 第一人称控制器 — 移动(WASD/摇杆)+ 鼠标/摇杆视角控制、重力、跳跃/蹲伏。
  2. 摄像机 — 眼睛高度视角、可配置的 FOV 和灵敏度、后坐力抖动。
  3. 射击模型 — 即时命中射线检测和/或生成投射物;反馈统一走一条命中路径。
  4. 武器 + 弹药 — 伤害、射速、弹匣、装弹、切换武器。
  5. 生命值 + 伤害 — HP、命中/爆头倍率、死亡;玩家和敌人共用此模型。
  6. 敌人 AI — 感知 → 警戒 → 攻击 → 搜索;掩体和反应延迟(game-ai)。
  7. 反馈 — 命中标记、撞击贴花/粒子、命中音效、屏幕震动、击杀确认。
  8. 目标 — 射击之外要做什么:清剿、占领、生存、护送。

设计参数

参数效果合理默认值
击杀时间(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