Godot 4でプロジェクトフォルダを自動生成するプラグインの作成方法
はじめに
Godotでゲーム開発を始める際、適切なフォルダ構造の構築は非常に重要です。しかし、新しいプロジェクトごとに同じフォルダ構造を手動で作成するのは時間の無駄です。この記事では、Godot 4でプロジェクトフォルダを自動生成するエディタプラグインの作成方法を解説します。
このプラグインを使えば、ボタン一つでプロジェクトに必要な標準的なフォルダ構造を瞬時に作成でき、開発の初期段階での時間を節約できます。
なぜフォルダ構造が重要なのか
整理されたフォルダ構造は以下の理由で重要です:
- 開発効率の向上: 必要なファイルをすぐに見つけられる
- チーム作業の効率化: 全員が同じフォルダ構造を理解できる
- 拡張性: プロジェクトが大きくなっても管理しやすい
- ベストプラクティスの確立: 一貫したコード・アセット管理が可能に
プラグインの概要
今回作成するプラグインは、次の機能を提供します:
- Godotエディタのメニューに「フォルダ構造を生成」オプションを追加
- 確認ダイアログを表示して誤操作を防止
- プロジェクトに標準的なフォルダ構造を自動生成
- 生成結果のフィードバックを表示
プラグインの作成手順
1. フォルダ構造の準備
まず、プラグイン用のフォルダを作成します:
res://addons/folder_generator/
2. プラグイン設定ファイルの作成
plugin.cfgファイルをプラグインフォルダに作成し、以下の内容を記述します:
[plugin]
name="Folder Generator"
description="プロジェクト用の標準フォルダ構造を生成します"
author="Your Name"
version="1.0"
script="plugin.gd"
3. プラグインスクリプトの実装
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メソッドにより、親ディレクトリも含めて一括で作成できます。
プラグインの使用方法
1. プラグインのインストール
作成したプラグインをインストールするには、以下の手順に従います:
- プロジェクトの「addons」フォルダに「folder_generator」フォルダを作成
plugin.cfgとplugin.gdファイルをこのフォルダに配置
2. プラグインの有効化
- Godotエディタで「プロジェクト > プロジェクト設定」を開く
- 「プラグイン」タブを選択
- リストから「Folder Generator」を探し、有効化のチェックボックスをオンにする
3. プラグインの実行
- Godotエディタのトップメニューから「プロジェクト > フォルダ構造を生成」を選択
- 確認ダイアログで「OK」をクリックすると、フォルダ構造が自動生成される
- 生成結果のダイアログが表示される
カスタマイズ方法
フォルダ構造のカスタマイズ
プロジェクトの要件に合わせてフォルダ構造をカスタマイズする場合は、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の内容が正しいか確認- Godotを再起動して、再度プラグインを有効化
フォルダ作成に失敗する場合
- ログコンソールでエラーメッセージを確認
- ファイルシステムの権限に問題がないか確認
DirAccess.open("res://")がnullを返していないか確認
まとめ
このエディタプラグインを使用することで、Godot 4プロジェクトのフォルダ構造を自動的に生成できるようになります。これにより、プロジェクト設定の時間を短縮し、一貫したフォルダ構造を保つことができます。
プラグインは簡単に拡張でき、プロジェクトの要件に合わせてカスタマイズすることも可能です。エディタプラグインの開発を通じて、Godotのエディタ機能を拡張する方法も学ぶことができました。
参考資料
- Godot 4.0 公式ドキュメント - プラグイン開発
- Godot 4.0 公式ドキュメント - ファイルシステムAPI
- Godot 4.0 公式ドキュメント - プロジェクト構成のベストプラクティス
Godot 4.xを基準としています。このプラグインは特定のGodotバージョンで動作確認されていますが、将来のバージョンでは変更が必要になる可能性があります。