godot-csharp — скилл для Claude Code: C# в Godot 4.7
Скилл для написания игр на C# в Godot 4.7 с поддержкой частичных классов, lifecycle-методов, Export-полей, сигналов как событий C# и взаимодействия с GDScript. Нужен Godot .NET build и .NET SDK 8+.
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-csharp -a claude-codeЧто делает godot-csharp
godot-csharp даёт паттерны для работы с Godot на C#: расширение узлов через partial-классы, перекрытие методов жизненного цикла в PascalCase (_Ready, _Process, _PhysicsProcess с double delta), объявление настраиваемых полей через [Export], сигналы как C# events с [Signal]-делегатами и type-safe поиск узлов через GetNode<T>. Внутри примеры класса игрока с инспектором-полями и гравитацией, сигналов здоровья, инстанцирования сцен и вызовов GDScript-методов через Call/Get/Set.
Скилл покрывает типичные ошибки: забывчивость про partial, неправильный регистр методов или их сигнатуры, неверное именование [Signal]-делегатов (должны заканчиваться на EventHandler), путаница между GD.Print и Console.WriteLine. Отмечает, что без .NET build и установленного SDK скрипты не скомпилируются, а для Android нужен .NET 9 SDK; web-экспорты на C# невозможны.
Примеры показывают типичный код: CharacterBody2D с [Export]-скоростью и прыжком, класс Health с сигналом изменения здоровья как event, инстанцирование PackedScene типированным Instantiate<T>, и interop с GDScript-узлами через динамические Call и Connect.
Какие задачи решает
- Написать скрипт узла с Export-полями для редактирования в инспекторе
- Объявить сигнал как C# event и подписаться на него
- Получить типизированную ссылку на потомка-узел через GetNode<T>
- Вызвать GDScript-метод или свойство из C#-кода
- Преобразовать GDScript-паттерны в C# (структуры значений, partial-классы)
Примеры запросов агенту
- Напиши класс игрока CharacterBody2D с [Export]-полями скорости и высоты прыжка, обработкой ввода и физикой в _PhysicsProcess
- Создай класс Health с [Signal]-делегатом для события изменения здоровья и методом TakeDamage, который испускает сигнал
- Покажи, как подписаться на GDScript-сигнал из C#-узла через Connect и Callable.From
Как установить godot-csharp
1Через Skills CLI (Vercel)
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-csharp -a claude-code2Вручную: положить файлы
~/.claude/skills/godot-csharp/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/godot-csharp/
1Через Skills CLI (Vercel)
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-csharp -a codex2Вручную: положить файлы
.agents/skills/godot-csharp/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-csharp -a cursor2Вручную: положить файлы
.cursor/skills/godot-csharp/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install gamedev-skills/awesome-gamedev-agent-skills godot-csharp2Вручную: положить файлы
.github/skills/godot-csharp/SKILL.md1Через Skills CLI (Vercel)
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-csharp -a gemini-cli2Командой платформы
gemini skills install https://github.com/gamedev-skills/awesome-gamedev-agent-skills --path skills/godot/godot-csharpВручную: положить файлы
.devin/skills/godot-csharp/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-csharp -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора40
Весь набор →Похожие
Вопросы о godot-csharp
Как установить godot-csharp?
Выполни команду npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-csharp -a claude-code, затем открой ~/.claude/skills/godot-csharp/SKILL.md для справки.
Что делает godot-csharp?
Даёт паттерны и примеры кода для разработки на C# в Godot 4.7: partial-классы узлов, lifecycle-методы, Export-поля, сигналы как C# events, поиск узлов и взаимодействие с GDScript.
Что нужно, чтобы использовать C# в Godot?
Нужен Godot .NET build (не стандартная сборка) и установленный .NET SDK версии 8 или выше; для экспорта на Android требуется .NET 9 SDK. Web-экспорты на C# невозможны.
Исходный текст
SKILL.md · Apache-2.0
---
name: godot-csharp
description: >
Use C#/.NET in Godot 4.7: partial classes extending nodes, the PascalCase lifecycle
(_Ready/_Process/_PhysicsProcess), [Export] fields, [Signal] delegates as C# events,
type-safe node lookup, and calling between C# and GDScript. Use when writing Godot game code in
C# (.cs files, .csproj), needing the Godot .NET build, converting GDScript patterns
to C#, or wiring Godot signals as C# events.
---
# Godot C# / .NET (4.x)
Write Godot game code in C#: node subclasses, the engine lifecycle, exports, signals as
events, and GDScript interop. Targets **Godot 4.7 (.NET / C#)** and **.NET 8**.
## When to use
- Use when scripting a Godot game in C# (`.cs` + `.csproj`), translating GDScript idioms
to C#, exposing `[Export]` fields, or wiring `[Signal]` delegates and GetNode<T>.
**When *not* to use:** GDScript-specific syntax → `godot-gdscript`; engine concepts that
are language-neutral (scenes, physics, animation) → the relevant `godot-*` skill. You need
the **Godot .NET build** + the .NET SDK installed; the standard build can't run C#.
## Core workflow
1. **Use the Godot .NET editor build** and install a .NET SDK: 8 or later, and 9 or later if
you export to Android. Creating the first C#
script generates a `.csproj`/`.sln`. Build with the editor or `dotnet build`.
2. **Every node script is a `partial` class** extending a Godot type (the source generator
relies on `partial`). The file/class name should match the node script.
3. **Override lifecycle methods in PascalCase** with `double` delta: `_Ready()`,
`_Process(double delta)`, `_PhysicsProcess(double delta)`.
4. **Expose tunables with `[Export]`**; they show in the Inspector like GDScript `@export`.
5. **Declare signals as `[Signal]` delegates** named `XxxEventHandler`; emit with
`EmitSignal(SignalName.Xxx, ...)` and subscribe with the generated C# `event`.
6. **Get nodes with `GetNode<T>("Path")`** (or `%Unique`), and call into GDScript with
`Call`/`Get`/`Set` when needed.
## Patterns
### 1. A node script: lifecycle, [Export], GetNode<T>
```csharp
using Godot;
public partial class Player : CharacterBody2D
{
[Export] public float Speed = 200.0f; // editable in the Inspector
[Export] public float JumpVelocity = -400.0f;
private const float Gravity = 1200.0f;
private AnimatedSprite2D _sprite;
public override void _Ready()
{
_sprite = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
}
public override void _PhysicsProcess(double delta)
{
Vector2 v = Velocity; // Velocity is a property here
if (!IsOnFloor())
v.Y += Gravity * (float)delta; // delta is double; cast for float math
if (Input.IsActionJustPressed("jump") && IsOnFloor())
v.Y = JumpVelocity;
float dir = Input.GetAxis("move_left", "move_right");
v.X = dir != 0 ? dir * Speed : Mathf.MoveToward(v.X, 0, Speed);
Velocity = v;
MoveAndSlide(); // no args, like GDScript 4.x
}
}
```
### 2. Signals as C# events
```csharp
using Godot;
public partial class Health : Node
{
// Delegate name MUST end with "EventHandler"; generator creates the event + SignalName.
[Signal] public delegate void HealthChangedEventHandler(int current, int max);
private int _hp = 100;
public void TakeDamage(int amount)
{
_hp = Mathf.Max(_hp - amount, 0);
EmitSignal(SignalName.HealthChanged, _hp, 100); // type-safe signal name
}
public override void _Ready()
{
HealthChanged += OnHealthChanged; // subscribe like a normal C# event
}
private void OnHealthChanged(int current, int max) => GD.Print($"HP {current}/{max}");
}
```
### 3. Instancing a scene in C#
```csharp
public partial class Spawner : Node2D
{
// Load once; PackedScene is the C# equivalent of preload's result.
private readonly PackedScene _bullet = GD.Load<PackedScene>("res://bullet.tscn");
public void Shoot(Vector2 at)
{
var b = _bullet.Instantiate<Node2D>(); // typed instantiate
b.GlobalPosition = at;
AddChild(b);
}
}
```
### 4. Interop with GDScript nodes
```csharp
public override void _Ready()
{
Node gd = GetNode("GDScriptNode");
// Call a GDScript method and read/write its properties dynamically.
gd.Call("take_damage", 10);
int score = (int)gd.Get("score");
gd.Set("score", score + 5);
// Connect to a GDScript signal by name:
gd.Connect("died", Callable.From(OnDied));
}
private void OnDied() => GD.Print("entity died");
```
## Pitfalls
- **Forgetting `partial`.** Without `partial`, the Godot source generator can't extend the
class and `[Export]`/`[Signal]` break with confusing build errors.
- **Wrong method case/signature.** C# overrides are `_Ready`, `_Process(double)`,
`_PhysicsProcess(double)` — PascalCase and `double` delta (GDScript uses snake_case and
`float`). A mismatched name just won't be called.
- **`[Signal]` delegate naming.** It must end with `EventHandler`; the engine exposes the
signal as the name without that suffix and generates `SignalName.X` and a C# `event`.
- **`GD.Print` vs `Console.WriteLine`.** Use `GD.Print`/`GD.PrintErr` to reach the Godot
output panel; `Console` output may not appear.
- **Value-type structs.** `Vector2`, `Color`, `Transform2D` are structs — mutate a local
copy (`var v = Velocity; v.X = ...; Velocity = v;`); editing `Velocity.X` directly won't
compile/persist.
- **Needs the .NET build + SDK.** The non-.NET editor can't run C#; a missing .NET SDK
causes build failures. Godot 4.7 projects target `net8.0`, but the generated `.csproj`
switches to `net9.0` for Android, so Android exports fail without the .NET 9 SDK.
- **`QueueFree()` vs `Free()`** — same rules as GDScript; prefer `QueueFree()`. Disposed
objects throw `ObjectDisposedException` if used after freeing.
- **C# projects cannot export to the web** in Godot 4 — keep web builds in GDScript.
Android and iOS exports are supported but experimental, and iOS can only be exported
from macOS.
## References
- For export attribute variants (`[ExportGroup]`, ranges, typed arrays), async with
`await ToSignal(...)`, `Godot.Collections` vs System collections, custom Resources in
C#, and project/build setup, read `references/csharp-setup-and-interop.md`.
## Related skills
- `godot-gdscript` — the GDScript equivalents of these patterns.
- `godot-signals-groups` — signal/event architecture (language-neutral).
- `godot-resources` — data resources; the C# `[Export]` + `Resource` pattern.
- `unity-csharp-scripting` — C# in Unity, for developers coming from there.
© gamedev-skills · Apache-2.0 · gamedev-skills/awesome-gamedev-agent-skills