# CLI-Anything Godot：生成可运行小场景，核对碰撞层与实际按键行为

## 执行范围

已运行Godot 4.7.2真实OpenGL场景、原生物理与Input.action_press：mask=1止于墙前、mask=0穿墙，保存实际渲染截图；未测真实键盘/手柄或Agent模型。

## 输入与目标

原创小角色、地面与两种碰撞层的最小2D工程

交付：Godot工程、实际运行帧和碰撞行为对照

## 运行

在 reference 目录执行；先按文件 requirements.txt / package.json 或原生工具文档安装依赖。浏览器练习需 `npx playwright install chromium`；也可设置 `PLAYWRIGHT_EXECUTABLE_PATH` 为自己的 Chrome 路径。

```sh
Godot --path project
# 项目会自动完成两次原生物理对照并退出
```

## 目录

- fixtures：作者原创输入，不包含用户真实资料。
- starter：读者待完成任务。
- reference：作者完成参考。
- results：作者实际运行所得或明确标注的待运行输入/预期合同。

## 七步

1. **建立真实节点**

项目包含CharacterBody2D角色和StaticBody2D墙，形状分别40×40与30×230。可见色块与CollisionShape不是同一对象。

2. **配置层与遮罩**

角色layer=2/mask=1，墙layer=1。先画出预期关系，再核对实际属性，不把视觉重叠当作有碰撞。

3. **发送原生输入**

作者用Input.action_press("ui_right")驱动物理进程，是引擎内事件模拟，不宣称真人按键或手柄已经测试。

4. **观察墙前停止**

持续90个physics tick，记录角色x。正例角色止于墙左边，截图来自真实Godot渲染而不是浏览器模拟游戏。

5. **制造遮罩负例**

只将角色collision_mask改0并复位位置，保持同样墙和视觉节点。相同输入会穿过墙，说明碰撞合同确实影响结果。

6. **保存物理与像素**

回读physics.json的mask/x/blocked，再对照两张原生PNG。渲染截图漂亮不等于碰撞逻辑已通过。

7. **检查独立运行**

移交project.godot、tscn与GDScript，重新打开应自动完成两组。缓存.godot不进入练习包，真实设备输入可由读者另测。

## 来源

- https://raw.githubusercontent.com/HKUDS/CLI-Anything/main/godot/agent-harness/GODOT.md


## 原生工具与边界补充

需要Godot4（作者4.7.2）。从reference执行Godot --path project，GDScript以res://../../results确定输出目录并自动创建，不依赖作者运行时symlink。原生窗口约数秒自动退出；需要图像时运行真实渲染窗口，headless不保证GPU截图。
