GodotEngine4 C#からGDScriptへの変換パターン 1/3

無料で軽快な 3D/2D のゲームエンジン「Godot Engine 4」で作成したプログラムC# から GDScript へ変換した際の具体例を変換のパターンとして紹介します。
1回目は、命名規則、コメント、インデントによるスコープと継続行の記述例を紹介します。
紹介するプログラムに出てきた範囲での紹介です。他については「GDScript reference — Godot Engine (4.x)の日本語のドキュメント」をご覧ください。

Godot Engine Download Latest ボタンを押します

※引用の英文の後の日本語は Google 翻訳の結果を挿入したものです。

C# から GDScript へ変換した理由

Godot Engine 4 で使えるスクリプトは複数あり、最初は C# で作成していました。
しかし、 2023 年 11 月 2 日の段階では、 Godot Engine 4 の .NET 版では、 まだ HTML5 形式をエクスポートすることができませんでした。

GodotEngine4(NET版)で作成したプロジェクトフォルダをコピーして、GodotEngine4(非NET版)で開きます.

C# のプログラムは Godot Engine の .NET 版でないと使えないため、HTML5 をエクスポートできる .NET ではないバージョンの Godot Engine 4 をインストールして、 C# で書いたプログラムは全て GDScript に変換しました。

変換はパターンを覚えてしまうと、手動ですが機械的に C# から GDScript のコードを作成することができました。

GDScript の特徴

GDScirpt は Python と構文が似ていますが、 Python に基づいた言語ではありません
非同期処理静的型付けもできる高水準インタプリタ言語です。

また、所感として C# と比較して、 GDScript は Godot Engine のエディタの GUI との連携が多く便利だと思いました。

  • オプションでの静的型付け が可能な 高水準インタプリタ言語 <doc_gdscript>。
  • Syntax inspired by Python. However, GDScript is not based on Python.
    Python からインスピレーションを得た構文。ただし、GDScript は Python に基づいていません。
  • GitHubでのシンタックスハイライトに対応。
  • スレッドの使用で非同期処理を行ったり、複数のプロセッサコアを利用したりできます。
機能一覧 — Godot Engine (4.x)の日本語のドキュメント と一部 Google 翻訳

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 の命名規則
参照:GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント

列挙型と列挙子の関係は、列挙型の後に複数の列挙子を指定します。

enum Element { # Element が列挙型で、以下の 4 つが 列挙子です。
    EARTH,
    WATER,
    AIR,
    FIRE,
}

参照:GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント

コメント

GDScript のコメント# から行末までに記述できます。

// コメント

/* 複数行の
 * コメント
 */
# コメント

# 複数行の
# コメント

複数行のコメントについては、“”” もあるようですが、コメントとしては推奨されないようです。
そのかわり、 Ctrl + K で複数行のコメントとコメント解除が行えます。

GodotEngine4 ビューポート(Script)では複数行を選択して 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.
Example fo code blocks would be the if statement, match statement, for & while loops, etc:
コードブロック内でのみ使用できる変数/値。 コードブロックの例としては、if ステートメント、match ステートメント、for & while ループなどがあります。

Scope Levels | Godot GDScript Tutorial | Ep 14 | Godot Tutorials

以下は、公式チュートリアルの各スコープを説明したコードに、範囲の描画をつけ足した図です。

GodotEngine 公式チュートリアルのスコープのサンプルコードに加筆した図

継続行

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!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました