まずは以下のリンクからGodotの公式ページに移動。
このページにあるGodotのダウンロードリンクはクリックせずに、右上にある「ダウンロード」を選択。
私の環境は macOSなので以下の表示となります。ここから "Godot Engine - .NET" で ".NET"バージョンをダウンロード。
ダウンロードした実行ファイルをアプリケーションフォルダにドラッグ&ドロップして移動。Windowsの場合は Cドライブ直下に "Tools" フォルダなど作っておいて移動しておくのが良いかもしれません。
ただそのまま Godot_mono.app を実行しても ".NETランタイムがない" というエラーとなります。
Godot_mono.app をダウンロードしたページを下にスクロールすると、"Requirements" の項目があるのでそこから ".NET SDK" のリンクをクリック。
".NET SDKのダウンロード" をクリック。
ダウンロードしたパッケージファイルを実行して .NET SDKをインストール。

再び Godot_mono.app を実行してエラーなく実行できることを確認します。
プロジェクトの作成と実行
環境構築はここまでで完了ですが、実際にC#を使ったプロジェクトを作れるかどうか試してみます。 「+作成」をクリックして、プロジェクト名を入力。「参照」ボタンでフォルダを指定して、「作成」で作成実行。

プロジェクトが作成できたら、「2Dシーン」をクリックしてルートノードを作成。
ノードの名前を「Main」に変更。
[CTRL+S] (or [Cmd+S])で、現在のシーンを保存。

スクリプトアイコンをクリックして、現在のシーンにスクリプトをアタッチ。
言語を「GDScript」ではなく「C#」にして「作成」。
スクリプトは以下のように入力。
using Godot; using System; public partial class Main : Node2D { public override void _Ready() { GD.Print("Hello!"); } public override void _Process(double delta) { } }
なお、Godotエンジンで C#スクリプトを扱う場合、Godotエディタ上でのコード補完の恩恵は得られないので、別途VSCodeなどを使うことになりそうです。
では右上の▶ボタンをクリックして実行。
メインシーンが定義されていないので「現在のものを選択」で実行。
特にエラーがなければ、以下が出力の表示され実行できました。
Godot Engine v4.5.1.stable.mono.official.f62fdbde1 - https://godotengine.org Metal 3.2 - Forward+ - Using Device #0: Apple - Apple M1 (Apple7) Hello!
C#でエラーになりやすいポイント
ファイル名とクラス名は一致している必要がある
例えばファイル名が "Main.cs" の場合、コード上のクラス名は "public partial class Main" というように名前が一致していないとエラーになるとのことです。
例えば先程のコードでクラス名が "Main" となっている部分を別の名前にすると、以下のエラーとなりました。
E 0:00:00:466 can_instantiate: Cannot instantiate C# script because the associated class could not be found. Script: 'res://Main.cs'. Make sure the script exists and contains a class definition with a name that matches the filename of the script exactly (it's case-sensitive).
<C++ エラー> Method/function failed. Returning: false <C++ ソース> modules/mono/csharp_script.cpp:2360 @ can_instantiate()
クラス名に気をつける
C#はスクリプト名がそのままクラス名となるため、gdscriptよりも名前の付け方に注意する必要があります。 例えば "Godot" という名前は予約されているためスクリプト名(=クラス名) に "Godot" というクラス名は指定できません。
using Godot; using System; public partial class Godot : Node2D // ←エラーとなるクラス名. {
オブジェクトの構造体プロパティには直接代入できない
gdscriptであれば position構造体プロパティに値を直接できましたが、C#の場合は以下の記述はできません。
public override void _Process(double delta) { Position.X += 100 * delta; }
プロパティを書き換えるには一度ローカル変数にコピーしてから書き換える必要があります。またC#では floatとdoubleの違いも意識する必要があります。
public override void _Process(double delta) { var pos = Position; pos.X += (float)(100 * delta); Position = pos; }
C#10から利用可能な with式を使うと少し短く記述することもできます。
public override void _Process(double delta) { Position = Position with { X = Position.X + (float)(100 * delta) }; }
おまけ:VSCodeと連携する
Godotエディタ側で「エディター設定」を開きます。macOSの場合は「Godot > エディター設定」です。
「テキストエディター > 外部」から以下のように設定します。

- 実行パス:VSCodeのパス (/Applications/Visual Studio Code.app など)
- 実行フラグ:{project} --goto {file}:{line}:{col}
- 外部エディタを使用:ON












