スクリプト言語

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

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

For example, take a game where a Camera2D node follows a ship. The Camera2D node follows its parent by default. Imagine you want the camera to shake when the player takes damage. As this feature is not built into Godot, you would attach a script to the Camera2D node and code the shake.

../../_images/scripting_camera_shake.gif

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

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

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

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

警告

`Godot4.0ではビジュアルスクリプトを完全に廃止することが決定されています。<https://godotengine.org/article/godot-4-will-discontinue-visual-scripting>`そのような事から、これからビジュアルスクリプトを使用してプロジェクトを作成するのはおすすめされていません。Godot4.0より先のバージョンでビジュアルスクリプトを拡張機能としてリリースする可能性はあります。

Godot3はビジュアルスクリプトをサポートしているものの、特にGodot4に移行したいと考えている場合はこちらを :ref:`trying out GDScript <toc-learn-scripting-gdscript>`見ることをお勧めします。

どの言語を使うべきか?

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

../../_images/scripting_gdscript.png

For C#, you will need an external code editor like VSCode or Visual Studio. While C# support is now mature, you will find fewer learning resources for it compared to GDScript. That's why we recommend C# mainly to users who already have experience with the language.

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

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用に開発されました。ゲーム開発者のために、ゲームコーディングの時間を短縮するために作られました。その特徴は以下の通りです。

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

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

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

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

  • Supports multiple threads as efficiently as statically typed languages.

  • ` ガベージ コレクション <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(ビジュアルスクリプト)

警告

`Godot4.0ではビジュアルスクリプトを完全に廃止することが決定されています。<https://godotengine.org/article/godot-4-will-discontinue-visual-scripting>`そのような事から、これからビジュアルスクリプトを使用してプロジェクトを作成するのはおすすめされていません。Godot4.0より先のバージョンでビジュアルスクリプトを拡張機能としてリリースする可能性はあります。

Godot3はビジュアルスクリプトをサポートしているものの、特にGodot4に移行したいと考えている場合はこちらを :ref:`trying out GDScript <toc-learn-scripting-gdscript>`見ることをお勧めします。

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

../../_images/scripting_visualscript.png

You can use other languages to create custom blocks that are specific to your game, for example, to script AIs, quests, or dialogues. That's where the strength of VisualScript lies.

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

参考

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

GDNativeを介したCとC++

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

../../_images/scripting_cpp.png

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

GDNative is the best choice for performance. You don't need to use it throughout an entire game, as you can write other parts in GDScript, C#, or VisualScript.

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

概要

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

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

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