こんにちは、トイロジック1年目プログラマーのS.Hです。本記事では、ゲーム内で使用するリソースなどのファイルを自動で振り分けてくれるツールについて解説をしたいと思います。(※開発期間が長くPython3への移行が出来ていないため、ツール作成にはPython2.7を使用しています。)
なぜ自動化したのか
私の所属しているプロジェクトではフォルダ毎に画像をアトラス化し、表示したい画像が含まれるもののみを読み込む処理となっていました。そのため適切なフォルダに画像を入れないと不要な画像を読み込むことになったり、正しく画像が表示されなくなってしまいます。
ツール作成前は画像の作成からフォルダに納品するまで全てデザイナの手によって行われていましたが、開発が進むにつれて画像の数が増えるとともにフォルダも細かく分ける必要が出てきました。さすがにこれ以上手動でフォルダ分けするのはつらいとの要望もあり、自動で画像を振り分けるツールを作成しました。
ツールの解説
画像の振り分けは、設定ファイルで指定したフォルダ以下の画像を対象に指定した画像名を含むかどうかで画像を振り分ける処理を行っています。処理のイメージはこんな感じです。
フォルダ分けを行うために必要な操作はバッチファイルを実行するだけになっています。ただし、実行する前にどのようなルールで振り分けるかを設定する必要があります。
設定ファイルにはXonという自社エンジンで使用されているデータフォーマットを使用しています。Xonについて詳しくはこちらの記事をご覧ください。Xonを採用した理由はXon専用の編集ツールがあるためjsonやtxtに比べて編集しやすかったからです。編集画面は画像のようになっています。
設定する項目は「振り分けルール」と「振り分け対象フォルダ」の2つがあります。まず、「振り分けルール」には振り分け先のフォルダパスとそのフォルダに振り分ける対象の画像に含まれる文字列を指定します。「振り分け対象フォルダ」には振り分けを行う画像が入ったフォルダパスと振り分け後のフォルダに付与される文字列の指定をします。最初だけ設定をしてしまえばあとは「振り分けルール」が増える時のみ設定を増やすだけなのでかなり時間を削減できます。
Pythonでの実装方法
振り分け処理のコードは以下のようになっています。
# 設定ファイルの読み込み
setting = Load(setting.xon)
# 振り分け対象フォルダ毎に設定ルールの振り分けを行う
for target in setting.target:
for current, sub_dir, files in os.walk(target):
for rule in rule_dict:
# 設定ルールの文字列を含む画像を抽出
target_tex = [f for f in files if rule in f]
if len(target_tex) <= 0:
continue
# 移動先フォルダ作成
move_path = os.path.join(rule_dict[rule], target_dict[target] + '_' + os.path.basename(rule_dict[rule]))
if not os.path.exists(move_path):
os.makedirs(move_path)
# 画像を振り分け先のフォルダに移動
for tex in target_tex:
prev_path = os.path.join(current, tex)
shutil.move(prev_path, move_path)
print("move %s to %s" % (prev_path, move_path))
os.walk()
で対象フォルダ以下の全てのファイルを走査し、[f for f in files if rule in f]
でルールの文字列を含むファイルを抽出してから該当のフォルダに移動する処理を行っています。
最後に
いかがでしたでしょうか? 今回は画像の振り分けを自動で行うツールについて紹介しました。ゲーム開発ではこのほかにも効率を高められる箇所が多数存在します。今後もプロジェクトメンバーがスムーズに開発を行えるように便利なツールを作っていければと思います。