Godot4 配置場所を変えても動作するようにloadで相対パスを使用する例

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、リソースの読み込みを行う preload 関数で絶対パスのかわりに相対パスを指定することのメリットについて紹介します。
アドオンをインストールする際にインストール先フォルダを指定できることや、 load 関数と preload 関数の違いについても紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。

絶対パスの際に生じるエラーの例

以下は、preload 関数で絶対パスのシーンファイル読み込むスクリプト例です。

## パラメータを入力するダイアログのシーンです。
var sc_fit_font_size_dialog_scene: PackedScene = preload("res://addons/sc_fit_font_size/sc_fit_font_size_dialog.tscn")

これは自作アドオンのスクリプトの一部なのですが、その自作アドオンをフォルダごと別の場所に移動してしまうと、絶対パスで指定したファイルが読み込めなくなります。

Godot4 絶対パスのpreloadが失敗する例2
res://addons/my/sc_fit_font_size/sc_fit_font_size.gd:11 - Parse Error: Preload file "res://addons/sc_fit_font_size/sc_fit_font_size_dialog.tscn" does not exist.

エディタ起動時などにも以下のように「Failed to load script “preload を行っている gd スクリプトファイルパス” with error “Parse error”」というエラーメッセージが表示され、そのアドオンが機能しません

Godot4 絶対パスのpreloadが失敗する例1

この問題は、絶対パスの代わりに相対パスで preload するファイルを指定することで回避できます。
※ preload を行う gd ファイルと読み込むファイル相対的な位置が変わる場合は、この方法では対応できません

## パラメータを入力するダイアログのシーンです。
var sc_fit_font_size_dialog_scene: PackedScene = preload("./sc_fit_font_size_dialog.tscn")

アドオンはインストール先を変えられることに注意

preload 関数で絶対パスでファイルを指定しても、そのファイルを別の場所に移動しない限り、そのパスは正しいので問題ありません

しかし、それらのファイル群をプラグインなどのアドオンとして公開する場合、アドオンは、インストール時にユーザがインストール先フォルダを指定できます。

Godot4 絶対パスのpreloadが失敗する例3

その際に、デフォルトの res://addons/(アドオン名)/ 以外の、他の場所に配置されてもエラーが起きないようにすると良いでしょう。

相対パスに変えた後の動作確認

相対パスに変えて、エディタを再起動するとエラーは表示されません。

ただし、エラーを起こした時点でプラグインとして無効になってしまっているので、利用するには、メニュー「プロジェクト」→「プロジェクト設定」で「プロジェクト設定」ダイアログを表示して、「プラグイン」タブのそのプラグインの「有効」チェックを入れなおす必要があります。

Godot4 絶対パスのpreloadが失敗する例4

このプラグインは、ツールメニューから選択すると、先ほど preload したシーンをポップアップで表示して、パラメータの入力を求めます。

preload の引数を絶対パスから相対パスに変えた後に、そのシーンが正しくポップアップするかを確認するため、メニュー「プロジェクト」→「ツール」から追加したツールメニュー選択します。

Godot4 絶対パスのpreloadが失敗する例5

相対パスの preload で指定したシーンファイルが、正しく読み込まれ、以下のようにポップアップとして正しく表示されました。

Godot4 絶対パスのpreloadが失敗する例6

preload と load の読み込みタイミングの違い

preload 関数は、スクリプトが読み込まれたタイミングで、リソースファイルをできるだけ早く読み込みます。
そのため、ゲームが開始した後の読み込みによる遅延やパフォーマンスの低下予防できます。

しかし、最初の読み込みに時間がかかるリスクもあるため、途中で読み込んでも構わない場合は、次に紹介する load 関数の方が良いかもしれません。

load 関数は、その load 関数が実行されるタイミングでリソースファイルを読み込みます。
読み込むタイミングを任意で決められるメリットがありますが、容量の大きいリソースファイルなどの場合、ゲームプレイ中に重くなるリスクもあります。

GDScript には、グローバル preload メソッドが存在します。”読み込み” 処理を前もって行い、パフォーマンスに敏感なコードの途中で、リソースの読み込が発生することを回避するために、できるだけ早くリソースを読み込みます。

対応する load メソッドは、load ステートメントに到達したときにのみリソースをロードします。つまりリソースをその場でロードするため、リアルタイム性の高いプロセスの途中で行うと速度低下を引き起こす可能性があります。 load() 関数は、すべてのスクリプト言語からアクセスできる ResourceLoader.load(path) のエイリアスでもあります。

ロジックの設定 — Godot Engine (4.x)の日本語のドキュメント

まとめ

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、リソースの読み込みを行う preload 関数で絶対パスのかわりに相対パスを指定することのメリットについて紹介しました。
アドオンをインストールする際にインストール先フォルダを指定できることや、 load 関数と preload 関数の違いについても紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました