- 删除 design/dev/architecture/adr-0001~0007 共 7 份文件(内容留 git 历史可查) - architecture.md:删「ADR 审计」「ADR 立项清单」两节;清除全文 ADR-000X 注记、QQ 表/S 表 ADR 引用;未决表关闭已落定项(QQ-01/02/03),立项清单在途事项转登记 QQ-11~14;补 A1 生成姿态事实、autoload 四件清单、board_generator 性能姿态;文档状态立「事实源地位」条 - CLAUDE.md:恢复 RNG 单点硬性红线(去 ADR-0007 引用);新增「架构事实唯一源」红线;规范导航架构行标注唯一事实源 - doc-conventions:§5 增「架构事实唯一源」行;§11 活文档清单补架构文档 - registry:architecture.yaml 删 18 处 adr 字段、autoload_set 补 SaveManager/MetaProgression、board_rending 更新为 Node2D 已落地事实;entities.yaml 12 处引用清除 - game/ 代码注释约 60 处清 ADR-000X 引用(事实与日期保留);豁免标记 ADR-0007-exempt → rng-seed-exempt(main.gd/static_scan.sh/architecture.md/06/iter27 五处同步) - GDD/qa 实现报告/research 卡片/roadmap/tests README 引用全清;死链校验 1206 链接 0 死链、gdd_lint 0 不通过 - 代码中 adr/adr5 等为 adventure_runner 既有局部变量名(非 ADR 引用),未动
4.6 KiB
4.6 KiB
Godot 当前最佳实践(4.7 视角,post-cutoff)
Last verified: 2026-09-12(源:官方迁移指南 4.5/4.6/4.7 逐条核实 + 4.7 release 页) 用途:训练数据(~4.4)之后的实践差异速查。写码代理在以下事项上不要按训练数据默认值行事。
1. 新建 project.godot 的默认值差异(最易踩坑)
| 设置 | 训练数据默认(≤4.4) | 4.7 实际新项目默认 | 生效版本 |
|---|---|---|---|
display/window/stretch/mode |
disabled |
canvas_items |
4.7(新项目) |
display/window/stretch/aspect |
keep |
expand |
4.7(新项目) |
rendering/rendering_device/driver.windows |
Vulkan(Forward+) | D3D12 | 4.6(新项目) |
physics/3d/physics_engine |
GodotPhysics3D | Jolt | 4.6(新项目;本项目 2D、无 3D 物理,无关) |
本项目为 2D 棋盘 UI:stretch mode / aspect 已定(canvas_items + expand,2026-09-12),但须知道引擎新项目默认值已不是训练数据里的那个——新建工程后检查这三项。
2. GDScript 4.7 两条语义变化(建议入编码规范)
- 打包数组元素赋值不再触发属性 setter(4.7,GH-113228):
my_packed_array[i] = v不再调用所在对象的 property setter——依赖 setter 副作用的写法必须改为显式赋回 + 显式调用 setter。D2 schema 类若以 setter 做校验,注意此差异。 - 类型化返回的方法覆盖必须显式
return(4.7,GH-115763):覆盖带返回类型的方法时返回类型自动继承,缺少 return 直接报错(旧版隐式返回 null)——虚方法覆盖一律显式写 return。
3. 资源与文件
Resource.duplicate(true)(4.5 起):深复制只覆盖内部子资源,不再覆盖外部子资源;需旧行为用duplicate_deep(DEEP_DUPLICATE_ALL)。D2 表资源含外部子资源时注意复制语义。FileAccess.get_as_text()的skip_cr参数已移除(4.6)——换行处理如需自定义须自行实现。- TSCN 格式(4.6):
load_steps不再写入、节点唯一 ID 入文件——双向兼容,但 VCS diff 会变大(可 Project > Tools > Upgrade Project Files 预升级,减少一次性大 diff)。 ProjectSettings.add_property_info()(4.5):对缺失/非法键(含usage)告警;改用set_as_basic()/set_restart_if_changed()/set_as_internal()。
4. 2D / UI / 文本
CanvasItem线条绘制不再自动加抗锯齿羽化(4.7)——粗线/描边需手动方案(D1 自绘棋盘格边框时注意)。- 输入设备 ID:比较输入来源时用
InputEvent.DEVICE_ID_MOUSE/DEVICE_ID_KEYBOARD常量,不要硬编码 0(4.7)——D1 输入路由。 - 字体导入
hinting默认 1 → 3(4.7);TextServer/Font/CanvasItem 全部 draw 方法新增可选oversampling参数(4.5)——自绘文字(数字标签)可显式控制过采样。 - RichTextLabel 图片参数两轮变化:4.5
size_in_percent→width_in_percent+height_in_percent;4.7 →width_unit/height_unit(bool →ImageUnit),常量UPDATE_WIDTH_IN_PERCENT→UPDATE_WIDTH_UNIT。 - Glow 默认值大改(4.6):blend mode Soft Light → Screen、intensity 0.8 → 0.3、各 level 重排——2D 后处理发光的视觉基底已变,调参以 4.7 默认为起点。
Control.grab_focus/has_focus新增可选参数(4.6,hide_focus/ignore_hidden_focus)——焦点可视化管理更细。
5. 4.7 已核实新特性(本项目可用的增量)
Tween.tween_await():信号等待语法糖——注意 B1 结算逻辑禁 await 是设计约束(可回放步骤流),该 API 不改变该约束- Control
offset_transform_*:平移/旋转/缩放 Control 不影响容器布局——D1 HUD 局部动效可用 - CollisionShape2D 单向碰撞方向属性(+
PhysicsServer2D.body_set_shape_as_one_way_collision的direction参数)——本项目棋盘非物理驱动,暂不依赖 - conic gradient、AtlasTexture 进 TextureRect——D1 贴图/着色可选
- DrawableTexture2D、AreaLight3D、HDR 输出、内置 VirtualJoystick、新 Asset Store——本项目暂不依赖
Font.find_variation扩展(palette_index / custom_colors)、TreeItem.select扩展——低相关
6. 本项目不消费的域(相关变更可忽略)
3D 渲染与物理(Jolt 行为变化 / SoftBody / WorldBoundary / SpringBone / LookAtModifier)、XR/OpenXR、网络(StreamPeerTCP/TCPServer 方法上移、RPC 更名)、GLTF 导入(int64 字段)、移动端导出(Android 模板结构变化、.NET 9)、编辑器插件 API(ImportFlags / VCS / ExportPlatform)。