無料で軽快な 3D/2D のゲームエンジン「Godot Engine 4」で作成したプログラムを C# から GDScript へ変換した際の具体例を変換のパターンとして紹介します。
2回目は、クラス、変数、関数の定義や、変数をエディタ上で編集可能にするキーワードを紹介します。
※紹介するプログラムに出てきた範囲での紹介です。他については「GDScript reference — Godot Engine (4.x)の日本語のドキュメント」をご覧ください。
※引用の英文の後の日本語は Google 翻訳の結果を挿入したものです。
C# → GDScript 変換パターン
要素ごとに分けて、プログラムを C# から GDScript への変換パターンを説明します。
簡素な変換パターン一覧表もあるので、そちらも参照してください。
クラス宣言
GDScript のクラス宣言は、クラス名と継承元を class_name, extends キーワードを使って設定します。
public partial class player : Area2D
{
}
class_name player
extends Area2D
class_name で定義した独自のクラスは、他の gd ファイル内で preload 関数で読み込むことで利用できます。
extends は、gd ファイルを作成する際に指定する基底のノードのクラスが自動的に記述されます。
GDScript reference — Godot Engine (stable) documentation in English
class_name Defines the script as a globally accessible class with the specified name.
スクリプトを、指定された名前を持つグローバルにアクセス可能なクラスとして定義します。extends Defines what class to extend with the current class.
現在のクラスでどのクラスを拡張するかを定義します。
変数定義
GDScript の変数定義は、 var の後に変数名を指定します。 ; も必要ありません。
public Vector2 ScreenSize; // Size of the game window.
var ScreenSize # Size of the game window.
また、以下のように様々な型の初期化も行えます。
参照:GDScript reference — Godot Engine (4.x)の日本語のドキュメント
# Member variables.
var a = 5
var s = "Hello"
var arr = [1, 2, 3]
var dict = {"key": "value", 2: 3}
var other_dict = {key = "value", other_key = 2}
var typed_var: int # オプションの静的型付け ( int 型 )
var inferred_type := "String"
変数をエディタ上で編集可能にするキーワード
C# のメンバ変数をエディタの Inspector ドックで編集可能にするためには [Export] Attribute (属性) を変数定義のアクセス修飾子の前につけます。
参照:チュートリアル: カスタム属性の定義と読み取り – C# | Microsoft Learn
[Export]
public int Speed { get; set; } = 400; // How fast the player will move (pixels/sec).
GDScript でメンバ変数をエディタの Inscpector ドックで編集可能にするためには @export Annotation (アノテーション) を var の前につけます。
参照:GDScript exported properties — Godot Engine (4.x)の日本語のドキュメント
@export var Speed = 400
アノテーションは他にもたくさんあります。それらについては「GDScript reference — Godot Engine (4.x)の日本語のドキュメント」などを参照してください。
関数の定義
GDScript では func キーワードで関数を定義します。
関数の定義の部分はスコープを1つ深くするために Python 同様に Tab を 1 つ挿入してから記述します。
() の中に仮引数をカンマ区切りで指定することで、呼び出し元から引数を受け取ることもできます。
C# ではイベント関数は override キーワードを指定しますが、 GDScript では不要です。
// イベント関数
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
ScreenSize = GetViewportRect().Size;
}
// 引数つきのイベント関数
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
// Mob が追跡する位置を更新。
TargetPosition = Position;
}
// 独自の関数
public void OnGameover()
{
Modulate = new Color(0.0f, 0.26f, 0.27f, 1f);
}
# イベント関数
# Called when the node enters the scene tree for the first time.
func _ready():
ScreenSize = get_viewport_rect().size
# 引数付きのイベント関数
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
TargetPosition = position;
# 独自の関数
func OnGameover():
modulate = Color(0.0, 0.26, 0.27, 1);
return キーワードで戻り値を返すこともできます。
参照:GDScript reference — Godot Engine (4.x)の日本語のドキュメント
今回はここまで
無料で軽快な 3D/2D のゲームエンジン「Godot Engine 4」で作成したプログラムを C# から GDScript へ変換した際の具体例を変換のパターンとして紹介しました。
2回目は、クラス、変数、関数の定義や、変数をエディタ上で編集可能にするキーワードを紹介しました。
参照サイト Thank You!
- Godot Engine 4
- GDScript reference — Godot Engine (4.x)の日本語のドキュメント
- チュートリアル: カスタム属性の定義と読み取り – C# | Microsoft Learn
- GDScript exported properties — Godot Engine (4.x)の日本語のドキュメント
- GDScript reference — Godot Engine (4.x)の日本語のドキュメント
- GDScript reference — Godot Engine (4.x)の日本語のドキュメント keyword
記事一覧 → Compota-Soft-Press
コメント