無料で軽快な 3D/2D のゲームエンジン「Godot Engine 4」の C# スクリプトと GDScript の変換の具体例の一覧です。
必要に応じて増やす予定です。
GodotEngine 4.2 (2024/01/17 現在) の時点では、まだ C# スクリプトは HTML5 エクスポートに対応していません。
HTML5 エクスポートする場合は GDScript で作成するか、 Godot Engine 3 を利用する方法があります。
Projects written in C# using Godot 4 currently cannot be exported to the web. To use C# on web platforms, use Godot 3 instead.
Godot 4 を使用して C# で作成されたプロジェクトは現在、Web にエクスポートできません。 Web プラットフォームで C# を使用するには、代わりに Godot 3 を使用してください。
Webのエクスポート — Godot Engine (4.x)の日本語のドキュメント と Google 翻訳
変換の具体例の一覧
命名規則
ファイル名 | snake_case ※1 |
クラス名 | PascalCase |
ノード名 | PascalCase |
関数 | snake_case |
変数 | snake_case |
シグナル | snake_case (xxx_changed など過去形) |
定数 | CONSTANT_CASE |
列挙型 | PascalCase |
列挙子 | CONSTANT_CASE |
参照:GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント
※1:GD スクリプトファイルは、シーン保存前だとノード名(CamelCase)のファイル名が設定されていますが、snake_case に直すことが公式サイトで勧められています。
また、クラス名については CamelCase にするため、作成した GD スクリプトの extend 行の前に class_name ClassName と追加しましょう。この場合のファイル名は class_name.gd が推奨されています。
参照:GDScriptスタイルガイド — Godot Engine (4.x)の日本語のドキュメント
class_name ClassName
extend Node
GodotEngine4 C#からGDScriptへの変換パターン 1/3 | Compota-Soft-Press
コメント
// コメント
/* 複数行の
* コメント
*/
# コメント
# 複数行の
# コメント
GodotEngine4 C#からGDScriptへの変換パターン 1/3 | Compota-Soft-Press
スコープ
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
GodotEngine4 C#からGDScriptへの変換パターン 1/3 | Compota-Soft-Press
継続行
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
GodotEngine4 C#からGDScriptへの変換パターン 1/3 | Compota-Soft-Press
クラス宣言
public partial class player : Area2D
{
}
class_name player
extends Area2D
GodotEngine4 C#からGDScriptへの変換パターン 2/3 | Compota-Soft-Press
変数定義
public Vector2 ScreenSize; // Size of the game window.
var ScreenSize # Size of the game window.
GodotEngine4 C#からGDScriptへの変換パターン 2/3 | Compota-Soft-Press
変数をエディタ上で編集可能にするキーワード
[Export]
public int Speed { get; set; } = 400; // How fast the player will move (pixels/sec).
@export var Speed = 400
GodotEngine4 C#からGDScriptへの変換パターン 2/3 | Compota-Soft-Press
関数の定義
// イベント関数
// 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);
GodotEngine4 C#からGDScriptへの変換パターン 2/3 | Compota-Soft-Press
using ディレクティブ
using Godot;
using System;
# GDScript では不要です。
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
signal 属性, signal 型
[Signal]
public delegate void HitEventHandler();
signal Hit
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
ノードの取得
GetNode("CollisionShape2D").Disabled = false;
$CollisionShape2D.disabled = false
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
列挙型
public enum GamePhase
{
Title, // タイトル画面
Play, // プレイ中
Gameover, // ゲームオーバー
Clear, // クリア
};
enum GamePhase
{
Title, # タイトル画面
Play, # プレイ中
Gameover, # ゲームオーバー
Clear, # クリア
}
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
static 変数 (クラス変数)
static public GamePhase CurPhase = GamePhase.Title;
static var CurPhase = GamePhase.Title
if (main.CurPhase != main.GamePhase.Play)
{
return;
}
if main.CurPhase != main.GamePhase.Play:
return
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
print 関数
GD.Print("test");
print("test")
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
if 文
// 例 1 enum の値の比較
if (CurPhase == GamePhase.Clear)
{
ZombieEraseTime -= delta;
}
// 例 2 キャストを含む比較
if (((int)(NoDamageTime / NoDamageBlinkInterval)) % 2 == 0)
{
GetNode<AnimatedSprite2D>("AnimatedSprite2D").Modulate = new Color(1, 0, 0, 1);
}
else
{
GetNode<AnimatedSprite2D>("AnimatedSprite2D").Modulate = new Color(1, 1, 1, 1);
}
# 例 1 enum の値の比較
if CurPhase == GamePhase.Clear:
ZombieEraseTime -= _delta;
# 例 2 キャストを含む比較
if int(NoDamageTime / NoDamageBlinkInterval) % 2 == 0:
$AnimatedSprite2D.modulate = Color(1, 0, 0, 1);
else:
$AnimatedSprite2D.modulate = Color(1, 1, 1, 1);
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
for 文
for (int i = 0; i < 3)
{
// i = 0, 1, 2 の 3 回のループ処理です。
}
for i in range(3):
# i = 0, 1, 2 の 3 回のループ処理です。
GodotEngine4 C#からGDScriptへの変換パターン 3/3 | Compota-Soft-Press
関連記事
記事一覧 → Compota-Soft-Press