Godotでゲーム開発を始める際、適切なフォルダ構造の構築は非常に重要です。しかし、新しいプロジェクトごとに同じフォルダ構造を手動で作成するのは時間の無駄です。この記事では、Godot 4でプロジェクトフォルダを自動生成するエディタプラグインの作成方法を解説します。
このプラグインを使えば、ボタン一つでプロジェクトに必要な標準的なフォルダ構造を瞬時に作成でき、開発の初期段階での時間を節約できます。
整理されたフォルダ構造は以下の理由で重要です:
今回作成するプラグインは、次の機能を提供します:
まず、プラグイン用のフォルダを作成します:
res://addons/folder_generator/
plugin.cfg
ファイルをプラグインフォルダに作成し、以下の内容を記述します:
[plugin]
name="Folder Generator"
description="プロジェクト用の標準フォルダ構造を生成します"
author="Your Name"
version="1.0"
script="plugin.gd"
plugin.gd
ファイルをプラグインフォルダに作成し、以下のコードを記述します:
@tool
extends EditorPlugin
var dialog: ConfirmationDialog
func _enter_tree():
# プラグインが有効化されたときに実行
add_tool_menu_item("フォルダ構造を生成", _on_create_folders_pressed)
func _exit_tree():
# プラグインが無効化されたときに実行
remove_tool_menu_item("フォルダ構造を生成")
if dialog:
dialog.queue_free()
func _on_create_folders_pressed():
# 確認ダイアログを作成
dialog = ConfirmationDialog.new()
dialog.title = "フォルダ構造の作成"
dialog.dialog_text = "標準的なフォルダ構造を作成しますか?\n既存のファイルやフォルダは上書きされません。"
dialog.confirmed.connect(_on_dialog_confirmed)
dialog.canceled.connect(_on_dialog_canceled)
# ダイアログをエディタに追加し表示
get_editor_interface().get_base_control().add_child(dialog)
dialog.popup_centered()
func _on_dialog_confirmed():
create_folder_structure()
dialog.queue_free()
func _on_dialog_canceled():
dialog.queue_free()
func create_folder_structure():
# 標準的なフォルダ構造を作成
var folders = [
"res://assets",
"res://assets/sprites",
"res://assets/textures",
"res://assets/models",
"res://assets/audio",
"res://assets/fonts",
"res://assets/data",
"res://scenes",
"res://scenes/levels",
"res://scenes/ui",
"res://scenes/characters",
"res://scenes/objects",
"res://src",
"res://addons",
"res://_debug"
]
var created_count = 0
var already_exists_count = 0
for folder in folders:
if create_directory(folder):
created_count += 1
else:
already_exists_count += 1
# 結果を表示するダイアログ
var result_dialog = AcceptDialog.new()
result_dialog.title = "フォルダ作成完了"
result_dialog.dialog_text = "作成したフォルダ: %d\n既存のフォルダ: %d" % [created_count, already_exists_count]
get_editor_interface().get_base_control().add_child(result_dialog)
result_dialog.popup_centered()
func create_directory(path) -> bool:
var dir = DirAccess.open("res://")
if dir:
if not dir.dir_exists(path):
var error = dir.make_dir_recursive(path)
if error == OK:
print("作成成功: " + path)
return true
else:
print("作成失敗: " + path + ", エラーコード: " + str(error))
return false
else:
print("フォルダはすでに存在します: " + path)
return false
else:
print("ディレクトリにアクセスできませんでした")
return false
このプラグインはEditorPlugin
クラスを拡張しています。Godotのエディタプラグインを作成するには、@tool
アノテーションとEditorPlugin
の継承が必要です。
@tool
extends EditorPlugin
プラグインが有効化されたときと無効化されたときに実行されるメソッドです:
func _enter_tree():
add_tool_menu_item("フォルダ構造を生成", _on_create_folders_pressed)
func _exit_tree():
remove_tool_menu_item("フォルダ構造を生成")
if dialog:
dialog.queue_free()
add_tool_menu_item
メソッドにより、Godotエディタの「プロジェクト」メニューに新しい項目が追加されます。
ユーザーがメニューオプションをクリックすると、確認ダイアログが表示されます:
func _on_create_folders_pressed():
dialog = ConfirmationDialog.new()
dialog.title = "フォルダ構造の作成"
dialog.dialog_text = "標準的なフォルダ構造を作成しますか?\n既存のファイルやフォルダは上書きされません。"
dialog.confirmed.connect(_on_dialog_confirmed)
dialog.canceled.connect(_on_dialog_canceled)
get_editor_interface().get_base_control().add_child(dialog)
dialog.popup_centered()
フォルダ構造を定義し、各フォルダを順番に作成します:
func create_folder_structure():
var folders = [
"res://assets",
"res://assets/sprites",
// 省略...
]
var created_count = 0
var already_exists_count = 0
for folder in folders:
if create_directory(folder):
created_count += 1
else:
already_exists_count += 1
実際にディレクトリを作成するためのヘルパーメソッドです:
func create_directory(path) -> bool:
var dir = DirAccess.open("res://")
if dir:
if not dir.dir_exists(path):
var error = dir.make_dir_recursive(path)
// 省略...
Godot 4ではDirAccess
クラスを使用してファイルシステム操作を行います。make_dir_recursive
メソッドにより、親ディレクトリも含めて一括で作成できます。
作成したプラグインをインストールするには、以下の手順に従います:
plugin.cfg
とplugin.gd
ファイルをこのフォルダに配置プロジェクトの要件に合わせてフォルダ構造をカスタマイズする場合は、create_folder_structure
メソッド内のfolders
配列を変更します:
var folders = [
"res://assets",
"res://assets/sprites",
// 自分のプロジェクトに必要なフォルダを追加
"res://assets/custom_folder",
// 省略...
]
確認ダイアログの内容をカスタマイズする場合は、_on_create_folders_pressed
メソッド内のダイアログテキストを変更します:
dialog.title = "カスタムタイトル"
dialog.dialog_text = "カスタムメッセージをここに入力"
addons/folder_generator/plugin.cfg
とplugin.gd
)plugin.cfg
の内容が正しいか確認DirAccess.open("res://")
がnull
を返していないか確認このエディタプラグインを使用することで、Godot 4プロジェクトのフォルダ構造を自動的に生成できるようになります。これにより、プロジェクト設定の時間を短縮し、一貫したフォルダ構造を保つことができます。
プラグインは簡単に拡張でき、プロジェクトの要件に合わせてカスタマイズすることも可能です。エディタプラグインの開発を通じて、Godotのエディタ機能を拡張する方法も学ぶことができました。
Godot 4.xを基準としています。このプラグインは特定のGodotバージョンで動作確認されていますが、将来のバージョンでは変更が必要になる可能性があります。