Godot で開発日記 #4

はじめに

前回は少し寄り道をしたけれど、今日は Godot の続きをしていこうと思う。

今回は Godot Engine 専用のプログラミング言語である GDScript について。

GDScript の特徴

GDScript は、

  • オブジェクト指向で命令型プログラミング言語

  • 漸近的型付け( Gradual typing )である

  • コンパイル、読み込みが高速

  • ベクトル型などゲームに必須の仕組みがあらかじめ含まれている

  • マルチスレッドに対応

といった特徴があります。

同じオブジェクト指向の Java などに導入されているガーベッジコレクションがないのは、ゲーム用ぽいなと。

構文

代表的な構文を一部紹介。

# コメントには `#` を使う# クラス
class_name MyClass
​
# 拡張
extends BaseClass
​
# メンバー変数
var a = 5
var s = "Hello"# 定数
const ANSWER = 42
​
​
# Enum
enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY}
enum Named {THING_1, THING_2, ANOTHER_THING = -1}
​
# ベクトル型
var v2 = Vector2(1, 2)
var v3 = Vector3(1, 2, 3)
​
# 関数
func some_function(param1, param2, param3):
    const local_const = 5if param1 < local_const:
        print(param1)
    elif param2 > 5:
        print(param2)
    else:
        print("Fail!")
​
    for i in range(20):
        print(i)
​
    while param2 != 0:
        param2 -= 1
​
    match param3:
        3:
            print("param3 is 3!")
        _:
            print("param3 is not 3!")
​
    var local_var = param1 + 3
    return local_var
​
# コンストラクター
func _init():
    print("Constructed!")
    var lv = Something.new()
    print(lv.a)

個人的にはかなり読みやすいし、書きやすそうな印象を受けた。

オブジェクト指向についてはバックエンドエンジニア時代に Java を長くやってたし、フロントエンドエンジニアになってからは、(厳密には漸近的型付けではないものの) TypeScript を多く触って来ているので、すんなり受け入れられそうだ。

実装

ノードを回転させるコードを書きました。

extends Sprite2Dfunc _init():
    print("Hello world!")
​
var speed = 400
var angular_speed = PIfunc _process(delta):
    rotation += angular_speed * delta
    var velocity = Vector2.UP.rotated(rotation) * speed
    position += velocity * delta

GDScript はインデントベースの言語なので、関数を書くときはインデントさせる必要がある。

func _init():
    print("Hello world!")

コンストラクターで Hello world! をログ出力するコード。

func _process(delta):
    rotation += angular_speed * delta
    var velocity = Vector2.UP.rotated(rotation) * speed
    position += velocity * delta

ゲーム開発でよくあるフレーム単位で呼び出される関数は _process となり、引数に前回フレームからの経過時間 delta を持つ。

このあたりは流石の専用言語。かなり便利だと思う。

rotation や position なんかも、 Node2D クラスから継承されたプロパティで、そのまま使える。やはり便利。

おわりに

GDScript が思っていた以上に書き心地が良いかも。

自分で実装しないといけないものが少なく、ゲーム開発に必要なものが用意されているのはかなり強力。


早速キャラが動かせたのも嬉しかった(思ってたのと違ったけど)。

引き続き、どんどん進めて一通りの知識をつけていこうと思う。

この記事が気に入ったらサポートをしてみませんか?