Files
agame/.workbuddy-ai/memory/MEMORY.md
T
2026-09-24 16:35:28 +08:00

1.7 KiB
Raw Blame History

项目长期记忆

工程约定

  • 玩家控制器只认「运动结果」,不认识任何动画片段名;表现层在 Body/PlayerAnimator。 新增动作状态改 player_animator.gd 的 ANIM_CLIPS,不要往 player.gd 里塞片段名。
  • 组件的可调参数放在组件自己身上(如 Zipline 的速度 / 刹车 / 吸附半径),控制器只读不定义。
  • 头顶 UI(血条、交互提示)是 player.tscn 里的 Label3D 节点,不在代码里动态创建。
  • 测试用 McpTestSuite(addons/godot_ai/testing),脚本放 res://tests/。

Godot MCP 踩坑

  • 数值标量会被字符串化:直接调 node_set_property 传 1 / false 会报 WRONG_TYPE: Cannot write String to a int/bool property。 绕法:改用 batch_execute,把 value 放进每条 command 的 params 里(嵌套数字能正常保型)。 字符串、Vector / Color 对象不受影响。
  • @tool 脚本现造的节点不会写进 .tscn:add_child 后不给 owner, PackedScene::pack() 就会跳过它。缆绳网格因此可以纯由锚点推导,不存在「文件和锚点对不上」的脏数据。
  • 新 class_name 要跑一次 filesystem_manage(op="scan") 才进全局类表, 否则别的脚本把它当类型引用会解析不到。
  • game_manage(op="suspend") 期间输入事件不送达,next_frame 也拦不住物理帧; 想抓「运行中途某一瞬间」的画面不可靠,只能靠日志 / 属性断言验证。
  • 测试跑在编辑器进程里,@tool 节点必须真的 add_child 进编辑中场景才会跑 _ready(); 用完在 teardown() 摘掉,节点名以 _McpTest 开头可被测试运行器兜底清理。