概要
Godot 4.xで、画像を動的に読み込む際、
拡張子が変わるので、拡張子でファイルを識別していると死ぬ。
具体的には、
デバッグモードなら1.jpg
などの画像なのに、
リリースモードにすると、1.jpg.import
になる。
解決方法
Globalスクリプト(例:Global.dg
)に判別用の関数を定義する
# デバッグモードかリリースモードかを判別する関数
# 拡張子の問題で、デバッグモードだと.jpgを見に行くが、リリースモードだとすべて.importになるので判別が必要
func is_debug_build():
return OS.is_debug_build()
# デバッグモードとリリースモードで拡張子を変える
func get_image_file_extention():
if (is_debug_build()):
return ".jpg"
else:
return ".jpg.import"
組み込んだ例
# 環境によって読み込む拡張子の変更
var ext = Global.get_image_file_extention()
var dir = DirAccess.open("res://asset/image/")
if dir:
# 指定ディレクトリのファイルを全部取得
dir.list_dir_begin()
# ファイル名の取得
var file_name = dir.get_next()
# ファイル名が取得できなくなるまで繰り返す
while file_name != "":
if file_name.ends_with(ext):
# 何らかの処理。
# 例えば、1.jpg, 2.jpg...みたいな感じなら1や2の数字の部分を抽出
var file_num = file_name.trim_suffix(ext).to_int()
# 画像を読み込むときは.importはつかないので、そのまま読み込む(これ、まじうぜぇ)
var texture = load("res://asset/image/%s.jpg" % stage_num)
file_name = dir.get_next()
以上です

この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。