スクリプト言語

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

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

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

../../_images/scripting_camera_shake.gif

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

Godotは、5 つのゲームプレイ用プログラミング言語を提供します。GDScript、C#、VisualScript、そして GDNative テクノロジーによる C++ と C です。他にも community-supported languages がありますが、これらは正式なものです。

1つのプロジェクトで複数の言語を使用することができます。例えば、チーム内で、ゲームプレイのロジックは記述の速いGDScriptでコーディングし、レベルデザイナーはグラフィカル言語のVisualScriptでクエストをスクリプト化し、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/%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用に開発されました。ゲーム開発者のために、ゲームコーディングの時間を短縮するために作られました。その特徴は以下の通りです。

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

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

  • エディタとの緊密な統合により、ノードやシグナルなどの情報をシーンからコード補完することができます。

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

  • 静的型付け言語と同様に効率的なマルチスレッドをサポートします。これは、LuaやPythonのようなサードパーティ言語では簡単に提供できなかった機能の一つです'。

  • ` ガベージ コレクション <https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3>`_はありません。この機能はゲーム作成時に結局邪魔になるので、この機能は使用できません。デフォルトでは、ほとんどの場合、エンジンが参照をカウントしてメモリを管理してくれますが、必要であればメモリを制御することもできます。

  • 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エディタのMonoエディションを使用する必要があります。Godotのウェブサイトのdownloadページでダウンロードすることができます。

GodotはMono.NETランタイムを使用するため、理論的には、サードパーティの.NETライブラリまたはフレームワークをGodotで使用できます。また、F#、Boo、ClojureCLRなどの共通言語インフラストラクチャに準拠したプログラミング言語も使用できます。 ただし、実際には、C#が公式にサポートされている唯一の.NETオプションです。

注釈

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

VisualScript(ビジュアルスクリプト)

Visual Scripting はグラフベースのビジュアルプログラミング言語であり、ブロックを繋いでいくものです。ゲームデザイナーやアーティストなど、プログラマーでない人にとっても素晴らしいツールになります。

../../_images/scripting_visualscript.png

他の言語を使用して、ゲームに特化したカスタムブロックを作成することができます。例えば、AIやクエスト、ダイアログをスクリプト化するためです。そこがVisualScriptの強みです。

VisualScript は、ゲームを完成させるために必要な基本的な構成要素をすべて備えていますが、この方法での使用はお勧めしません。他のプログラミング言語と比較して、プログラミングに時間がかかります。

参考

詳しくは、 Getting started with VisualScript を参照してください。

GDNativeを介したCとC++

GDNativeを使えば、Godotを再コンパイルしたり、再起動したりする必要なく、CやC++でゲームコードを書くことができます。

../../_images/scripting_cpp.png

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

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

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

概要

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

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

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