無料で軽快な 3D/2D のゲームエンジン「Godot Engine 4」で作成したプログラムを C# から GDScript へ変換した際の具体例を変換のパターンとして紹介します。
1回目は、命名規則、コメント、インデントによるスコープと継続行の記述例を紹介します。
※紹介するプログラムに出てきた範囲での紹介です。他については「GDScript reference — Godot Engine (4.x)の日本語のドキュメント」をご覧ください。
※引用の英文の後の日本語は Google 翻訳の結果を挿入したものです。
C# から GDScript へ変換した理由
Godot Engine 4 で使えるスクリプトは複数あり、最初は C# で作成していました。
しかし、 2023 年 11 月 2 日の段階では、 Godot Engine 4 の .NET 版では、 まだ HTML5 形式をエクスポートすることができませんでした。
C# のプログラムは Godot Engine の .NET 版でないと使えないため、HTML5 をエクスポートできる .NET ではないバージョンの Godot Engine 4 をインストールして、 C# で書いたプログラムは全て GDScript に変換しました。
変換はパターンを覚えてしまうと、手動ですが機械的に C# から GDScript のコードを作成することができました。
GDScript の特徴
GDScirpt は Python と構文が似ていますが、 Python に基づいた言語ではありません。
非同期処理、静的型付けもできる高水準インタプリタ言語です。
また、所感として C# と比較して、 GDScript は Godot Engine のエディタの GUI との連携が多く便利だと思いました。
機能一覧 — Godot Engine (4.x)の日本語のドキュメント と一部 Google 翻訳
- オプションでの静的型付け が可能な 高水準インタプリタ言語 <doc_gdscript>。
- Syntax inspired by Python. However, GDScript is not based on Python.
Python からインスピレーションを得た構文。ただし、GDScript は Python に基づいていません。- GitHubでのシンタックスハイライトに対応。
- スレッドの使用で非同期処理を行ったり、複数のプロセッサコアを利用したりできます。
C# → GDScript 変換パターン
要素ごとに分けて、プログラムを C# から GDScript への変換パターンを説明します。
簡素な変換パターン一覧表もあるので、そちらも参照してください。
命名規則
ファイル名やスクリプト内のクラス名などの名前の付け方です。
これを守ることで、Godot Engine の既存のクラスなどの名前との衝突を減らすことが出来ます。
ファイル名は、そのファイルで定義する独自クラス名を PascalCase から snake_case に変換したものです。
例えばクラス名 PlayableCharacter を定義する gd ファイル名は playable_character.gd になります。
ファイル名 | snake_case |
クラス名 | PascalCase |
ノード名 | PascalCase |
関数 | snake_case |
変数 | snake_case |
シグナル | snake_case (xxx_changed など過去形) |
定数 | CONSTANT_CASE |
列挙型 | PascalCase |
列挙子 | CONSTANT_CASE |
参照:GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント
列挙型と列挙子の関係は、列挙型の後に複数の列挙子を指定します。
enum Element { # Element が列挙型で、以下の 4 つが 列挙子です。
EARTH,
WATER,
AIR,
FIRE,
}
参照:GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント
コメント
GDScript のコメントは # から行末までに記述できます。
// コメント
/* 複数行の
* コメント
*/
# コメント
# 複数行の
# コメント
複数行のコメントについては、“”” もあるようですが、コメントとしては推奨されないようです。
そのかわり、 Ctrl + K で複数行のコメントとコメント解除が行えます。
You can select the lines you want to comment out and hit ctrl+k to comment/uncomment them.
“”” is misleading, as it looks like a comment in the script editor. Text in triple-quotes are multi-line strings. The documentation should be changed, as well as the color-coding of the syntax in the editor.
コメントアウトしたい行を選択し、ctrl+k を押してコメント化/コメント解除できます。 「”」はスクリプト エディターのコメントのように見えるため、誤解を招きます。三重引用符で囲まれたテキストは複数行の文字列です。エディターでの構文の色分けだけでなく、ドキュメントも変更する必要があります。
How to write multiline comments ? – Godot Engine – Q&A
スコープ
GDScript では Python のように行頭のタブの個数によってスコープを分けます。
以下のプログラムでは、GDScript の最後の行だけタブが1個挿入されています。
このタブは、C# の例では _Ready 関数のスコープを表す { … } に対応します。
public partial class player : Area2D
{
public Vector2 ScreenSize; // Size of the game window.
public override void _Ready()
{
ScreenSize = GetViewportRect().Size;
}
}
class_name player
extends Area2D
var screen_size
func _ready()
screen_size = get_viewport_rect().size
スコープは、変数を参照できる範囲です。
例えば、関数のスコープの中で定義した変数は、その関数内でのみ参照できます。
コードブロックのスコープは、 if 文の中などさらに細かな範囲を指します。
プログラミングにおけるスコープ(英: scope, 可視範囲)とは、ある変数や関数などの名前(識別子)を参照できる範囲のこと。通常、変数や関数が定義されたスコープの外側からは、それらの名前を用いるだけでは参照できない。このときこれらの変数や関数は「スコープ外」である、あるいは「見えない」といわれる。
スコープ (プログラミング) – Wikipedia
GodotEngine GDScript の公式のチュートリアルでは、 Global, Class, Function, Code Block の 4 つのスコープが紹介されています。
Global scope is a class, variable, or function that can be used anywhere in the Godot Application.
グローバル スコープは、Godot アプリケーション内のどこでも使用できるクラス、変数、または関数です。A class scope is a variable or function that can be used anywhere in the class file.
クラス スコープは、クラス ファイル内のどこでも使用できる変数または関数です。A variable/value that can only be used inside of a function
関数内でのみ使用できる変数/値A variable/value that can only be used inside of a code block.
Scope Levels | Godot GDScript Tutorial | Ep 14 | Godot Tutorials
Example fo code blocks would be the if statement, match statement, for & while loops, etc:
コードブロック内でのみ使用できる変数/値。 コードブロックの例としては、if ステートメント、match ステートメント、for & while ループなどがあります。
以下は、公式チュートリアルの各スコープを説明したコードに、範囲の描画をつけ足した図です。
継続行
GDScript では、行頭のタブ(インデント)を増減することで、スコープを分けました。
インデントを 1 つずつ増やすことでスコープを 1 段階深くします。
インデントを一度に 2 つ増やすことで継続行を表します。
以下の公式のサンプルならば 3 ~ 6 行目、 11 ~ 12 行目が、その直前の行よりもインデントが一度に 2 つ増え、継続行を表します。
var angle_degrees = 135
var quadrant = (
"northeast" if angle_degrees <= 90
else "southeast" if angle_degrees <= 180
else "southwest" if angle_degrees <= 270
else "northwest"
)
var position = Vector2(250, 350)
if (
position.x > 200 and position.x < 400
and position.y > 300 and position.y < 400
):
pass
参照:GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント
今回はここまで
無料で軽快な 3D/2D のゲームエンジン「Godot Engine 4」で作成したプログラムを C# から GDScript へ変換した際の具体例を変換のパターンとして紹介しました。
1回目は、命名規則、コメント、インデントによるスコープと継続行の記述例を紹介しました。
参照サイト Thank You!
- Godot Engine 4
- GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント 命名規則
- How to write multiline comments ? – Godot Engine – Q&A
- スコープ (プログラミング) – Wikipedia
- Scope Levels | Godot GDScript Tutorial | Ep 14 | Godot Tutorials
- GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント フォーマッティング
- 機能一覧 — Godot Engine (4.x)の日本語のドキュメント
記事一覧 → Compota-Soft-Press
コメント