📝

Godot でゲーム開発がしてみたい 7 (Scripting languages)

2023/10/13に公開

Godot DocsのIntroductionを一通り見てきたので、Step by Stepの章に着手する。
この記事では以下のトピックからScripting languagesを学習する。これらのトピックは次の章であるYour first 2D gameの準備となる。これらのトピックで基礎がかなり身につくらしい。

  • Nodes and Scenes
  • Creating instances
  • Scripting languages ← いまここ
  • Creating your first script
  • Listening to player input
  • Using signal

https://docs.godotengine.org/en/stable/getting_started/step_by_step/scripting_languages.html

スクリプト言語(Scripting languages)

この章では、Godot で利用可能なスクリプト言語の概要を知ることができ、各選択肢の長所と短所がわかる。次のパートでは、GDScript を使って最初のスクリプトを書く。

スクリプトはノードに紐づけて(アタッチして)、その動作を拡張する。つまり、スクリプトはアタッチするノードのすべての関数とプロパティを継承します。(スクリプトが継承するってどういうことや?一種のオブジェクトとしてとらえたほうがいいのか?)

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

利用可能なスクリプト言語(Available scripting languages)

Godotは以下4つのゲームプレイプログラミング言語で拡張できる。

  • GDScript
  • C#
  • C言語 (GDExtension)
  • C++ (GDExtension)
    コミュニティがサポートする言語はほかにもあるが、公式にサポートされているのは上記のみだ。

1つのプロジェクトに対して複数の言語で開発することができる。例えばゲームロジックは開発しやすいGDSciriptで開発して、複雑なアルゴリズムは高速に動作するC#やC++で実装することでパフォーマンスを最大化できる。

どの言語を使うべきか(Which language should I use?)

あなたが初心者ならGDScriptを勧める。軽量でわかりやすい構文からなり、Godotと最も親和性がある。
C#については、VSCodeやVisual Studioのような外部コードエディタが必要だ。C#のサポートは成熟しているが、GDScriptに比べると学習リソースが少ない。そのため、C#は主にすでに使用経験のあるユーザーにお勧めす。

GDScriptの特徴と長所と短所を見ていく。

GDScript

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

  • シンプルな構文で効率よく記述できる
  • 超高速コンパイルと短いロード時間
  • Godotエディタとの緊密に統合されている。これによりノード、シグナル、およびアタッチされているシーンからのより多くの情報をえることでコード補完ができる。(この点はかなりよいと思う)
  • ベクター型とトランスフォーム型を内蔵しており、ゲームに必須の線形代数を多用する場合に効率的。(可変超配列とジェネリクスがあると言っている?)
  • 静的型付け言語と同等の効率でマルチスレッドをサポート。
  • ガベージ・コレクションがない。この機能はゲームを作るときに結局邪魔になるからだ。デフォルトではほとんどの場合、エンジンが参照をカウントしてメモリを管理してくれるが、必要に応じてメモリをコントロールすることもできる。
  • 漸進的型付け(Gradual typing)。変数はデフォルトで動的な型を持っていますが、型ヒントを使用して強力な型チェックを行うこともできます。(Guradual typingとは何か?と思ったがTypeScriptのような言語を想像したらいいみたいだ。)
  • インデントでコードブロックを構成する(ちょっと嫌だな)

Pythonなどを利用していないのは、それなりに技術課題があったからだそうだ。マルチスレッドの扱いに難があったとか。グローバルインタプリタロック(GIL)関連の挙動を指している気がするが、ゲームエンジンからみたときに強力な制約なんだと思う。

オフィシャルドキュメントでは他の3言語も紹介されているが、GDScriptを採用するのでここで記事は終える。

GitHubで編集を提案

Discussion