記事

Article

Enumを全スクリプト共有で使う。

: Godot4
投稿日:
更新日:

Common.hにenum持たせてそれを各々のスクリプトっで共有して使うというのをGodotでやりたい。その方法。

共有用のスクリプトをNodeを継承して作成する。

スクリプトは、左下のFileSystemのScriptフォルダなど任意の場所に作成する。

ProjectSettingsでAutoloadの設定をする

上のメニュー、Project > ProjectSettings を押し、Autoloadタブに切り替える

Pathで、先ほど作ったファイル(ここではCommon。もちろん他の名前でも良い)を指定してAddボタンを押す。上図のようにスクリプトが加わっていればOK。

共有するEnumを書く

extends Node

enum PieceType {
	Pawn, 
	Bishop,
	Knight,
	Rook,
	Queen,
	King,
} 

(Pawnは0、Bishopは1、... と続く)

上記のenumを他のファイルで読み込む

そのままPieceType.Pawnのように呼び出せるかというとそうはならない。Autoloadは、Godot内で/root/の直下に生成されるのでそれにアクセスする形になる。さきほどのスクリプトがNode継承(extends Node) しているのはこのため。

上図のように、RootScene > GameControl という構成 (ここのRootSceneはさきほどの/root/とは違う。/root/RootScene になる)、GameControlにenumを呼び出したいスクリプトを書く

extends Node3D

@onready var Common = get_node("/root/Common")

# Called when the node enters the scene tree for the first time.
func _ready():
	print("PieceType.Bishop",Common.PieceType.Bishop)
	pass # Replace with function body.

上記のように、

@onready var Common = get_node("/root/Common")

@onreadyで、変数にセットしそれをそのスクリプト内で使う。 Commonという変数(変数名は任意)にセットしたので呼び出し方は下記になる

var test = Common.PieceType.Bishop
print(test)

ここではコンソールに1が表示される。

以上。いわゆるシングルトンパターンを利用したい時も同様のフロー。