記事
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が表示される。
以上。いわゆるシングルトンパターンを利用したい時も同様のフロー。