用途
本技能是 Godot 引擎第一人称射击(FPS)游戏的专家级蓝图,用于指导 FPS 核心玩法系统的实现与打磨。它围绕核心循环「移动/视角 → 瞄准 → 射击(hitscan)→ 后坐力恢复 → 再次索敌」组织,覆盖相机视角、移动物理、命中查询、武器摆动与后坐力等关键环节。
主要能力
技能提供一组强制阅读的脚本作为实现基础:
- fps_camera_look.gd — 原始
_input鼠标视角(yaw/pitch) - fps_movement_logic.gd — 加速度/摩擦力/空中控制
- hitscan_weapon_query.gd — 空间状态 hitscan
- weapon_bobbing_system.gd — 视图模型摆动/摇晃
此外还包含 procedural_recoil_handler.gd、hitscan_weapon_logic.gd、advanced_fps_controller.gd、weapon_state_machine.gd、frame_perfect_input.gd、bullet_decal_spawner.gd、weapon_spread_calc.gd、server_projectile_instance.gd、player_anim_bridge.gd、recoil_system.gd(弹道模式 + bloom)、aim_assist.gd(手柄摩擦/磁吸)等脚本。
技能还给出高级 FPS 技巧:视图模型的正弦摆动与视角摇晃、台阶抬升(step-up)、战术侧倾(tactical lean)。
使用方式
技能以「强制脚本阅读」为起点,要求先阅读核心脚本,再按需查阅参考文档。它列出大量「NEVER」规则,例如:
- 枪战与命中注册:不要在
_process中做命中检测,应使用_physics_process+intersect_ray;后坐力不能只作用于枪模型,必须作用于相机并配合散布;不要信任客户端伤害,需服务端权威与延迟补偿;不要忘记为玩家 RID 设置exclude/add_exception;浮点冷却不要用==,应使用is_equal_approx。 - 输入与移动:不要在
_physics_process中轮询鼠标,视角应使用_input/_unhandled_input;不要在原始Transform3D上累积视角,应存储 yaw/pitch 浮点;不要在move_and_slide()前将速度乘以delta;枪口前向不要用Transform3D.looking_at,应使用-transform.basis.z。 - 打磨:枪声不要用单个
AudioStreamPlayer,应分层机械音 + 射击音 + 尾音;贴花不要永久保留,应淡出/池化;武器数值不要硬编码,应使用 WeaponData Resources;热路径武器状态不要用普通 String,应使用StringName。
技能还提供官方文档链接(如 Ray-casting、Physics introduction、Using 3D transforms、Using InputEvent、Mouse and input coordinates、Controllers/gamepads、Using decals、High-level multiplayer、Using AnimationTree、Resources、Audio streams、Optimization using Servers)以及相关技能路由(前置、补充、下游、主控)。
适用场景
适用于在 Godot 中开发 FPS 游戏、需要实现或优化射击手感、命中注册、后坐力、武器摆动、移动物理等系统的开发者。也适用于需要将 FPS 射击逻辑与多人网络、动画、音频、性能优化等模块集成的项目。
限制
技能中关于收费、价格、平台、效果等具体信息暂未提供。部分脚本与参考文档的具体内容需查阅原始仓库。TPS/掩体理论链接到 godot-genre-shooter 兄弟技能,本技能聚焦 FPS 专属装配。