60 lines
4.3 KiB
Markdown
60 lines
4.3 KiB
Markdown
---
|
||
title: "Godot Gameplay Scripter Agent Personality"
|
||
type: source
|
||
tags: [game-development, godot, agent-personality, gdscript, gdscript-2.0, signal-architecture, type-safety, composition]
|
||
date: 2026-05-02
|
||
---
|
||
|
||
## Source File
|
||
- [[Agent/agency-agents/game-development/godot/godot-gameplay-scripter.md]]
|
||
|
||
## Summary(用中文描述)
|
||
- 核心主题:Godot 4 游戏玩法脚本专家 AI Agent 人格规范,专注于用 GDScript 2.0 和 C# 构建类型安全、信号驱动的游戏系统
|
||
- 问题域:游戏开发中如何避免 GDScript 动态类型的运行时错误、实现系统间松耦合通信、保持场景树可维护性
|
||
- 方法/机制:静态类型强制 + 强类型信号架构 + 组合优于继承 + Autoload 事件总线
|
||
- 结论/价值:提供一套完整的 Godot 4 游戏玩法系统开发规范,使代码在大型项目中仍可维护和测试
|
||
|
||
## Key Claims(用中文描述)
|
||
- GDScript 信号必须使用 `snake_case` 且携带类型化参数——携带 Variant 的未类型化信号是运行时错误的根源
|
||
- GDScript 2.0 中每个变量、函数参数和返回值必须显式类型声明——生产代码中出现未类型化的 `var` 会导致难以追踪的 bug
|
||
- 场景组合优于继承:向节点附加 `HealthComponent` 比 `CharacterWithHealth` 基类更灵活且更可测试
|
||
- Autoload 仅用于真正的全局状态(设置/存档/事件总线)——将游戏逻辑放入 Autoload 会导致无法独立实例化和垃圾回收
|
||
- 场景必须可独立运行(按 F6)——假设父节点上下文的场景在集成时会产生级联错误
|
||
|
||
## Key Quotes
|
||
> "Signals must carry typed parameters — never emit untyped Variant unless interfacing with legacy code." — 信号类型安全原则
|
||
> "Prefer composition over inheritance: a HealthComponent node attached as a child is better than a CharacterWithHealth base class." — 节点组合哲学
|
||
> "Autoloads are singletons — use them only for genuine cross-scene global state: settings, save data, event buses, input maps." — Autoload 使用规范
|
||
> "Test every scene in isolation by running it directly (F6) — it must not crash without a parent context." — 场景隔离测试原则
|
||
|
||
## Key Concepts
|
||
- [[GDScript-2.0]]:Godot 4 的脚本语言,支持静态类型声明、类型推断(`:=`)、强类型数组(`Array[Type]`)
|
||
- [[TypedSignals]]:携带显式类型参数的信号(`signal health_changed(new_health: float)`),而非 Variant 类型
|
||
- [[CompositionOverInheritance]]:通过组合节点(HealthComponent/MovementComponent)实现行为,而非继承层次
|
||
- [[EventBus]]:Autoload 事件总线(EventBus.gd),用于跨场景解耦通信,避免直接节点引用
|
||
- [[StaticTyping]]:GDScript 2.0 强制显式类型声明,消除运行时类型错误
|
||
- [[GDExtension]]:使用 C++ 编写性能关键系统并暴露给 GDScript 的原生扩展机制
|
||
- [[RenderingServer]]:Godot 低层渲染 API,用于绕过场景树开销实现高效 2D/3D 渲染
|
||
- [[SceneTreeLifecycle]]:`_ready()` 初始化、`_exit_tree()` 清理、`queue_free()` 安全删除的节点生命周期管理规范
|
||
|
||
## Key Entities
|
||
- [[GodotGameplayScripter]]:本 Agent 身份——Godot 4 游戏玩法脚本专家,强调类型安全、信号完整性和组合架构
|
||
- [[GodotEngine]]:Godot 4 游戏引擎,支持 GDScript 2.0、C#、GDExtension 多语言生态
|
||
- [[GDScript]]:Godot 官方脚本语言,GDScript 2.0 引入静态类型支持
|
||
- [[CSharpGodot]]:Godot 的 C# 集成,使用 `[Signal]` 委托模式和 `EmitSignal(SignalName.X, ...)` 调用
|
||
|
||
## Connections
|
||
- [[GodotGameplayScripter]] ← builds_with ← [[GDScript-2.0]]
|
||
- [[GodotGameplayScripter]] ← builds_with ← [[CSharpGodot]]
|
||
- [[TypedSignals]] ← enables ← [[EventBus]]
|
||
- [[CompositionOverInheritance]] ← enables ← [[TypedSignals]]
|
||
- [[StaticTyping]] ← enforces ← [[GDScript-2.0]]
|
||
- [[GodotGameplayScripter]] ← complements ← [[GodotShaderDeveloper]]
|
||
- [[GodotGameplayScripter]] ← complements ← [[GodotMultiplayerEngineer]]
|
||
|
||
## Contradictions
|
||
- 与 [[UnrealSystemsEngineer]] 冲突:
|
||
- 冲突点:游戏逻辑放置位置(Autoload vs Actor/C++ 类)
|
||
- 当前观点:游戏逻辑不得放入 Autoload,应封装在可实例化的节点组件中
|
||
- 对方观点:Unreal 中游戏逻辑倾向于放置在 Actor/Component 层次,Autoload 在 Godot 中仅作服务定位器使用
|