关于 threejs-gameplay-systems
面向 Three.js 浏览器游戏开发的技能,指导构建可玩的游戏循环、响应式控制和明确的更新顺序。它还提供设计、物理选择、手感调优及测试脚手架方面的指导。
主要功能
- 01规划核心循环与关卡
- 02分阶段构建可玩机制
- 03明确系统边界和更新顺序
- 04使用种子随机数支持确定性测试
- 05调节控制、镜头与反馈
适用场景
- 01从脚手架创建 Three.js 游戏
- 02为现有游戏增加或调整机制
- 03设计关卡、遭遇和难度曲线
- 04处理碰撞、车辆或角色物理
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ majidmanzarpour/ threejs-game-skills --skill threejs-gameplay-systems安装后在 Claude Code 中输入/threejs-gameplay-systems确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/threejs-vite-game/.gitignoreindex.htmlpackage-lock.jsonpackage.jsonplaywright.config.tstsconfig.jsonvite.config.tsassets/threejs-vite-game/scripts/inspect-threejs-canvas.mjsassets/threejs-vite-game/src/main.tsstyles.cssvite-env.d.tsassets/threejs-vite-game/src/core/InputController.tsLoop.tsRenderer.tsassets/threejs-vite-game/src/entities/Pickup.tsPlayer.tsassets/threejs-vite-game/src/game/Game.tsassets/threejs-vite-game/src/systems/AudioSystem.tsCameraRig.tsCollisionSystem.tsDebugTools.tsHud.tsassets/threejs-vite-game/src/utils/dispose.tsrandom.tsassets/threejs-vite-game/tests/bot-playtest.template.tsvisual-regression.template.tsvisual.spec.tsreferences/game-feel.mdgenre-design.md详细介绍
Three.js 游戏系统
创建或改进可游玩的浏览器游戏循环,明确职责归属,提供响应灵敏的控制、确定性的更新顺序,以及能够影响玩家决策的空间。
从实际加载的技能文件解析 <this-skill-dir> 和本地引用;使用运行器发现的替代项之前,先解析同级技能。
参考资料
| 文件 | 何时阅读 |
|---|---|
references/game-feel.md | 调整手感、反馈效果、冲击感、受击停顿、屏幕震动,或声称游戏玩法经过精心打磨时 |
references/genre-design.md | 设计关卡、竞技场、赛道、波次、洞穴、谜题、遭遇战或难度曲线时 |
references/physics-engine-selection.md | 添加或更改物理、碰撞密集型玩法、载具、滚动球、角色控制器、传感器、移动平台时 |
从这里开始
python3 <this-skill-dir>/scripts/create_threejs_game.py ./my-game
复制 assets/threejs-vite-game/,重写项目名称,并为游戏提供专属的视觉测试和画布检查器。--force 会将文件复制到非空目录,覆盖与脚手架文件冲突的文件,并保留其他所有文件。
先设计
对于广泛的游戏创建或重大设计变更,请编写三个简短文档,或更新现有文档。范围较小的机制修复应沿用现有设计,并保留无关系统:
设计简介。 玩家承诺(一句话描述幻想)· 目标感受 · 主要动词 · 次要动词 · 玩家每 5–30 秒重复做什么 · 1–5 分钟内会发生什么变化 · 玩家如何失败、学习并重新开始 · 什么会获得奖励,什么会带来风险 · 更优秀的玩家会采取哪些不同做法 · 如何传达下一个决策 · 本阶段不包含的内容。
核心循环约定。 玩家执行[动词]以实现[目标],同时[压力]带来风险;成功获得[奖励],失败导致[代价/重试]。 随后在代码中验证每个部分:动词对应实际输入,目标在游戏世界或 HUD 中可见,首个可玩分钟内就存在压力,奖励会改变状态而不只是视觉效果,失败能让玩家明白发生了什么,重启足够迅速,能够吸引玩家再次尝试。
关卡或遭遇计划。 空间布局 · 摄像机能看到和看不到的内容 · 玩家起点、第一个决策、第一个威胁、第一个奖励 · 地标 · 挑战如何每 20–60 秒或每波次/洞穴/圈数逐步升级 · 恢复节奏 · 如何预示危险 · 哪些部分采用模块化或参数化设计。
“探索一个很酷的场景”不是设计简介。简介必须包含决策、压力、反馈和后果。
构建
- 检查现有结构、脚本、依赖项、循环、输入、摄像机、实体、状态、UI 和诊断工具。
- 保持小而清晰的职责边界:
core、game、entities、systems、assets、ui、tests。 - 分阶段实现并保持可玩——输入、状态、实体、碰撞、反馈、HUD 和音频钩子、诊断工具——确保每一步都有可玩的内容。 在扩展内容之前,先按预期的摄像机尺度,使用实际的主角和反馈,搭建一个有代表性的遭遇场景。敌人、奖励和道具的多样性应服务于游戏类型所需的决策,而非满足通用的资源配额。
- 调整手感:移动、加速、摄像机跟随和视野角、受击停顿、冲击反馈、冷却时间、难度、重启。
- 保持热路径的分配开销较低,并明确更新顺序。
- 通过脚手架提供的带种子 RNG 处理所有游戏随机性,以确保确定性测试钩子继续正常工作。
协同开发时,先定义输入意图、实体/资源接口和事件,再分派相互独立的模块。向负责人汇报行为变更和本地检查结果,由负责人负责整合后的浏览器测试。用户更改需求时,更新现有简介和待办任务,而不是重新开始已完成的工作。
游戏玩法代码负责发出音频事件;threejs-audio-generator 负责生成实际资源和运行时音频矩阵。
技术栈
TypeScript、Vite、Three.js 模块、three/addons/... 中的官方控制器、加载器和后期处理功能。使用 lil-gui 实时调整常量。使用 Web Audio 进行运行时播放。物理引擎的选择、时间步长和碰撞体策略遵循 references/physics-engine-selection.md——当游戏需要真实模拟时,默认使用 Rapier。
常见问题
静态演示,而不是可玩的循环 · 在先搭建好的场景上生硬地添加机制 · 描述了核心循环,却从未通过真实输入、压力、奖励和失败/重试进行验证 · 赛道或竞技场只起装饰作用,而不影响决策 · 机制虽能编译,却没有任何输入可以触发 · 摄像机和控制响应滞后或遮挡下一个决策 · 状态变化未传递到 UI、音频或 VFX · 在任何机制需要之前就构建抽象层。
报告
说明行为和控制方式、规模较大的构建所需的三个设计产物、架构选择和调优后的数值、已修改的文件,以及实际游玩时的观察结果。如果涉及物理,请注明物理引擎、时间步长和碰撞体策略。