スクリプト言語

このレッスンではGodotで使用できるスクリプト言語の概要をお伝えします。それぞれの長所と短所も学習できます。次のパートではGDScriptを使って最初のスクリプトを書いていきます。

スクリプトはノードに接続され、ノードの振る舞いを拡張するもの です。これは接続されるノードの関数とプロパティすべてを継承することを意味します。

例えば、Camera2Dノードが船を追いかけるゲームで考えてみましょう。Camera2Dノードは、デフォルトでは親ノードについて動きます。ここで、プレイヤーがダメージを受けると、カメラが揺れるようにしたいとします。この機能はGodotに組み込まれていないので、スクリプトをアタッチしてカメラが揺れるようにコーディングする必要があります。

../../_images/scripting_camera_shake.gif

利用可能なスクリプト言語

Godotは、 4つのゲームプレイ用プログラミング言語 を提供します。GDScript、C#、そして、GDExtension テクノロジーを介した C と C++ です。他にもコミュニティーサポートによる言語がいくつかありますが、これらは公式なものです。

1つのプロジェクトで複数の言語を使用することができます。例えば、チーム内で、ゲームプレイのロジックはすぐに書けるGDScriptでコーディングし、C#やC++で複雑なアルゴリズムを実装してパフォーマンスを最大化するといったことが可能です。あるいは、すべてをGDScriptやC#で記述することもできます。それはあなたが決めることです。

このように、さまざまなゲームプロジェクトや開発者のニーズに応えるために、柔軟な対応を行っています。

どの言語を使うべきか?

もしあなたが初心者なら、GDScriptから始めることをお勧めします。私たちはこの言語を、Godot とゲーム開発者のニーズのために特別に作りました。軽量でわかりやすい構文を持ち、Godot との最も緊密な統合を提供します。

../../_images/scripting_gdscript.webp

C# の場合は、VSCode や Visual Studio などの外部のコードエディターが必要になります。C# は十分にサポートされていますが、GDScript と比較すると学習に役立つ情報はあまり出回っていません。そのため、C#は主に、すでにこの言語を使い慣れている経験豊富なユーザーにお勧めしています。

各言語の特徴や長所・短所を見ていきましょう。

GDScript

GDScript は、オブジェクト指向および 命令型プログラミング言語であり、Godot用に開発されました。ゲーム開発者のために、ゲームコーディングの時間を短縮するために作られました。その特徴は以下の通りです。

  • 短いファイルにつながるシンプルな構文。

  • コンパイルと読み込みが非常に速い。

  • 緊密に統合されたコードエディタには、ノードやシグナルのコード補完、さらに多くの情報をシーンから確認できる機能が付属。

  • ベクトル型と変換型を内蔵しており、ゲームに必須の線形代数の多用に効率的です。

  • 静的型付き言語と同じようにマルチスレッドに対応しています。

  • ガベージ コレクション はありません。この機能はゲーム作成時に結局は障害になります。デフォルトでは、ほとんどの場合、エンジンが参照をカウントしてメモリを管理してくれますが、必要であればメモリを制御することもできます。

  • Gradual typingです。変数はデフォルトで動的な型を持ちますが、型ヒントを用いて強力な型チェックを行うこともできます。

GDScript はインデントを使ってコードブロックを構成するため Python のように見えますが、実際には同じようには動きません。GDScriptは、Squirrel、Lua、Pythonなど複数の言語からヒントを得ています。

注釈

なぜ我々はPythonやLuaを直接使っていないのか?

数年前、GodotはPythonを使い、次にLuaを使いました。どちらの言語も、統合には多くの労力を要し、大きな制約がありました。例えば、Pythonではスレッドのサポートが大きな課題でした。

専用言語を開発することで手間がかからず、ゲーム開発者のニーズに合わせてカスタマイズすることができます。現在、サードパーティーの言語では提供することが難しかったパフォーマンスの最適化や機能の開発に取り組んでいます。

.NET / C#

Microsoftの C# はゲーム開発者の間で人気があるので、私たちは公式にこれをサポートしています。C# は成熟した柔軟な言語であり、そのために書かれた多くのライブラリがあります。Microsoft からの寛大な寄付のおかげで、私たちはこの言語のサポートを追加することができました。

../../_images/scripting_csharp.png

C#は、ガベージコレクタに注意する必要がありますが、性能と使いやすさの間のトレードオフを提供します。

注釈

C#でスクリプトを書くには、Godotエディタの .NETエディションを使用する必要があります。Godotのウェブサイトの download ページでダウンロードすることができます。

Godot は .NET 8 を使用するため、理論的はサードパーティの .NET ライブラリまたはフレームワークを使用できます。また、 F#、Boo、ClojureCLRなどの Common Language Infrastructure に準拠したプログラミング言語も使用できます。ただし公式にサポートされている .NET オプションは C# のみです。

注釈

GDScriptコード自体は、コンパイルされたC#またはC++ほど高速には実行されません。ただし、ほとんどのスクリプトコードは、エンジン内のC++コードで記述された高速なアルゴリズムの関数を呼び出します。多くの場合、GDScript、C#、またはC ++でゲームプレイロジックを記述しても、パフォーマンスに大きな影響はありません。

注意

Godot 4 を使用して書かれた C# のプロジェクトは、Web プラットフォームにエクスポートできません。 WebプラットフォームでC#を使用するには、代わりにGodot 3の使用を検討してください。 Android および iOS プラットフォームのサポートは、Godot 4.2 で利用できますが実験的であり、 some limitations apply が適用されます。

参考

To learn more about C#, head to the C#/.NET section.

GDExtensionを通したC++

GDExtensionを使えば、Godotを再コンパイルすることなく、C++でゲームコードを書くことができます。

../../_images/scripting_cpp.png

C API Bridgeの利用により、生成される共有ライブラリには、任意の言語のバージョンやコンパイラブランド、バージョンの混在が可能です。

GDExtensionは、パフォーマンスを重視する場合に最適です。他の部分はGDScript、C#で書けるので、ゲーム全体を通して使う必要はありません。

GDExtension を使用する場合、使用可能な型、関数、およびプロパティは、Godot の実際の C++ API によく似ています。

要約

スクリプトとは、機能を拡張したいノードに接続されるコードを含むファイルです。

Godotは4つの言語を公式サポートし、パフォーマンスと使用の容易さの間の柔軟性を提供しています。

必要なアルゴリズムをCやC++で実装してほとんどのゲームロジックをGDScriptやC#で書く、というような言語を混ぜて開発することも可能です。