GodotでC#を使う手順(Windows)

はじめに

Godotでは、基本的にGDScriptという独自言語を利用してプログラムを書きます。

このGDScriptは書きやすくていいのですが、Godotがサポートする機能の範囲を超えることができません。

他の(言語の)プログラムをGodotで使いたい場合には、現在2つの手段が用意されています。それはC#かC++でプログラムを記述する方法です。

C#/.NET
C# is a high-level programming language developed by Microsoft. Godot supports C# as an option for a scripting language,...
GDExtension C++ example
はじめに: The C++ bindings for GDExtension are built on top of the C GDExtension API and provide a nicer way to "extend" nod...

しかし、Godot自体が日本でマイナーなゲームエンジンですから、その拡張方法であるC#とC++の使い方については、さらに日本語文献は少なくなります。

そこで、今回の記事ではGodotでC#を使う手順を紹介したいと思います。C#はUnityでも利用されている言語で、Unityからの移行時にも利用できると思います。

ちなみに、GodotでC#を使う利点は拡張性以外にもあります。

  • C++で拡張するよりも実行環境の整備が楽
  • 実行速度の向上
  • 静的型付けによる開発のやりやすさ

また、GDScriptとの併用ももちろんできるので、必要に応じて使うことができます。

Godot for C#の注意点

PC用のゲームのエクスポートにはC#の制限がありませんが、他のプラットフォームへの出力には制限があります。現在(version 4.2.2)のC#を使うことの制限が次のとおりです。

  • Web プラットフォーム : Godot4ではC#のサポートをしていません。Godot3を利用してください
  • Android : .NET 7.0 以降をターゲットにする必要があります
  • iOS : .NET 8.0 以降をターゲットにする必要があります。

詳細はこちらを参考にしてください(この記事の作成時点でのサポートですので、変更がある可能性があります)

Godot .NETのダウンロード

始めにGodotのC#対応バージョンをダウンロードします。通常のGodotはC#に対応していないので注意してください。とはいえ、Godotはダウンロードするだけで使えるので、面倒さは少ないですね。

公式ページからGodot Engine .NETをダウンロードします。

Download for Windows - Godot Engine
Download the latest stable version of the Godot Engine for Windows

適当な場所に展開して、Godotを起動してください。

C#対応のGodot Engineのファイル名はGodot_v4.x.x-stable_mono_win64.exeになっています。

.NET SDKのダウンロード

C#のビルド環境を入れていないと、プログラムのコンパイルができないので、.NET SDKをインストールします。

インストールは下記の公式サイトからインストーラーをダウンロードします。

.NET のダウンロード (Linux、macOS、Windows)
Linux、macOS、および Windows で .NET アプリケーションを構築し、実行するための無料ダウンロード。.NET Framework、.NET、および ASP.NET 用のランタイム、SDK、および開発者パック。

インストーラーをダウンロードしたら、インストールを開始します。

問題なくインストールできたらOKです。Godot_v4.x.x-stable_mono_win64.exeを起動して、適当なプロジェクトを作成してください。

外部エディタの設定

Godotに内蔵されているScriptエディタはGDScriptを書く分には問題ありませんが、C#の機能をサポートしているとは言い難いです。自動補完やデバック機能を利用したい場合には外部エディタを設定してください。

しかし、この記事では外部エディタの設定は行いません。使う方は、公式ページなどを参考に、外部エディタを設定してください。

C# の基本
はじめに: This page provides a brief introduction to C#, both what it is and how to use it in Godot. Afterwards, you may wan...

C#で書いてみる

適当なノードを作って、プログラムをアタッチしてみます。

すると、言語をGDScript以外にC#を選択できるようになっています。

C#を選択してプログラムを作成します。作成するとScriptエディタにてプログラムが編集できます。

とりあえず、テストコードを書いてみます。

using Godot;
using System;

public partial class c_test_node : Node2D
{
	// Called when the node enters the scene tree for the first time.
	public override void _Ready()
	{
	}

	// Called every frame. 'delta' is the elapsed time since the previous frame.
	public override void _Process(double delta)
	{
		GD.Print("Hello C#");
	}
}

Godotのビルドイン関数にはGD名前空間でアクセスできます。

プログラムを書いたら、通常のGodotと同じ様に実行ボタンを押します(プログラムのビルドだけなら、ビルドボタンでもいいです)。

すると、プロジェクトのビルドが始まり、ゲームが実行されます。

実行すると、Godotのログに先程の文章が流れ始めたら成功です。

これでGodotでC#を利用することはできました。GodotでC++を使うよりも遥かに簡単に使えますね。

GDScriptからC#で書いたノードを呼び出す

とはいえ、すべてのプログラムをC#で書くことは、けっこう大変です。

GDScriptは、pythonのように書きやすさを重視しているのですから、簡単なコードであれば、GDScriptを使いたいという欲望も生まれてきます。

そんなときは、C#とGDScriptを併用すればいいのです。この節ではGDScriptからC#で書いたコード(ノード)を呼び出してみます。

まず、C#のコードを書きます。ここでは、make_strという呼ばれたstringを返す関数を実装したコードを書きました。

using Godot;
using System;

public partial class c_test_node : Node2D
{
	// Called when the node enters the scene tree for the first time.
	public override void _Ready()
	{
	}

	// Called every frame. 'delta' is the elapsed time since the previous frame.
	public override void _Process(double delta)
	{
	}
	
	public String make_str()
	{
		return "hello";
	}
}

これをc_test_node.tscnというノードにアタッチします。ノードの型はNode2Dにしました。

次に、このc_test_node.tscnをスクリプト内で呼び出すノードを作ります。ノードの名前はcall_c_sharp_node.tscnとしました。

このノードに次のGDScriptをアタッチします。

extends Node2D

# Called when the node enters the scene tree for the first time.
var c_sharp_node := preload("res://c_test_node.tscn") 


func _ready():
	var test := c_sharp_node.instantiate()
	var s :String = test.make_str()
	print(s)

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
	pass

C#のコードがアタッチされたノードをプレロードし(PackedScene)します。それを_readyにてインスタンス化して、make_strを呼び出してみました。

実行すると、次のログがGodotの出力にでます。

ちゃんと、C#のコードが呼び出せていますね。また、返り値も正しく取得できています。

この様にするれば、必要な箇所のみをC#で書くことができますね。

まとめ

今回の記事では、GodotでC#を利用する手順をまとめました。

昔GodotでC++を利用したことがありますが、結構ビルドが大変でした。それに比べてC#のビルドは、かなり簡単だったので、おすすめです。

また、GDScriptからもC#で書いたコードを呼び出すことができることも確認しました。これからは必要な箇所のみをC#で書くこともできます。

また、GodotでC#を利用するメリットとして、拡張性、速度、保守性などの利点を上げました。しかし、今回利用してみて、デメリットも幾つか見えてきました。

  • GDScriptの様に書けない文法・規則がある
  • 実行にC#のビルド時間が加算される
  • Godot内臓のエディタではC#のコードがとても書きづらい

これらのデメリットを許容できる方は、ぜひ利用してみてはいかがでしょうか

追記

C#で使えるLLMの実行パッケージLLamaSharpをGodotで使った話を書きました。

タイトルとURLをコピーしました