Godot C# 游戏开发
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/godot-csharp-sh-aj4mtj。
技能介绍
要解决什么问题
在 Godot 里用 C# 写玩法逻辑时,引擎 API 和 GDScript 习惯并不一一对应:partial 类、PascalCase 生命周期、[Export]/[Signal] 委托命名,以及 GetNode 与 GDScript 互调,都容易在「能编译」和「引擎真的会调用」之间踩坑。本技能聚焦 Godot 4.3+ 的 .NET / C# 脚本层,而不是场景、物理、动画等语言无关主题。
技能如何组织工作流
- 环境与工程:必须使用 Godot .NET 编辑器构建,并安装与版本匹配的 SDK(4.3/4.4 对应 .NET 6.0,4.5+ 对应 .NET 8);首个 C# 脚本会生成
.csproj/.sln,可在编辑器或dotnet build下编译。 - 节点脚本形态:每个节点脚本是继承 Godot 类型的 partial class,文件名与类名应对齐节点脚本;生命周期重写为
_Ready()、_Process(double delta)、_PhysicsProcess(double delta)。 - Inspector 与信号:用
[Export]暴露可调参数;用[Signal]声明以EventHandler结尾的委托,通过EmitSignal(SignalName.Xxx, ...)发射,并订阅生成的 C# 事件。 - 场景与互操作:用
GetNode("Path")(或%Unique)取节点;需要时通过Call/Get/Set调用 GDScript;技能内还覆盖场景实例化、信号即 C# 事件等模式。
适用边界与注意点
- 不要用本技能替代:纯 GDScript 语法 →
godot-gdscript;与语言无关的引擎概念 → 对应godot-*技能。 - 常见失败点:忘记
partial会导致源生成器无法扩展类;生命周期方法名或double delta签名错误则回调不会被调用;Vector2等 值类型 需整 struct 写回,不能直接改字段;日志用GD.Print而非依赖控制台;释放节点优先QueueFree(),释放后访问会抛ObjectDisposedException。 - 导出与平台:部分平台(Web/移动端等)的 .NET 导出步骤与标准构建不同,需查阅目标平台的 .NET 导出说明;Android 4.5 等场景可能涉及更高版本 SDK 要求。
使用场景
- Godot 4 .NET 工程里首次添加 `.cs` 节点脚本,需确认 partial 类名、`_Ready`/`_Process(double)` 能被引擎回调
- Inspector 要把速度、冷却等参数做成可调项,用 `[Export]` 替代 GDScript 的 `@export` 并分组展示
- 节点间用 `[Signal]` 与 `EmitSignal(SignalName.Xxx)` 发事件,并在其它 C# 脚本里订阅生成的事件而非手写字符串信号名
- 场景里部分节点仍是 GDScript,C# 父节点要用 `GetNode` 定位子节点并通过 `Call`/`Get`/`Set` 调用对方方法或属性
适合人员
- 从 Unity 迁到 Godot、希望继续用 C# 写节点生命周期与 Inspector 字段的 indie 玩法程序员
- 团队锁定 Godot .NET 编辑器构建,负责把现有 GDScript 模块按文件改写成 `.cs` 并保留信号与导出语义的后端/客户端开发
- 维护 Godot 4.3/4.4 项目时要对齐 .NET 6 SDK、`.csproj` 与源生成器报错(缺少 partial、`[Export]` 失效)的构建负责人
- 在 C# 里动态 `Instantiate` PackedScene、挂到树并连接 `SignalName` 与事件 handler 的 gameplay 工程师