Work in progress

The content of this page was not yet updated for Godot 4.4 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

スクリプト言語

このレッスンでは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.png

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

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

GDScript

GDScript は、`オブジェクト指向<https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0>`_および `命令型<https://ja.wikipedia.org/wiki/%E5%91%BD%E4%BB%A4%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0`_プログラミング言語であり、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#で書く、というような言語を混ぜて開発することも可能です。