Files
nexus/wiki/sources/godot-gameplay-scripter.md
2026-05-03 05:42:12 +08:00

60 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 中仅作服务定位器使用