リソース組み込み効率化の取り組みの紹介

f:id:sumzap_engineer:20210330154103p:plain

はじめに

はじめまして、サムザップでクライアントエンジニアをしている金崎です。
今回は、私が所属しているプロジェクトである「この素晴らしい世界に祝福を!ファンタスティックデイズ」でのリソース組み込みの効率化の取り組みについて紹介します。

背景

プロジェクトでのリリース当初は下記のようなフローでリソースの組み込み作業を行ってきました。

f:id:sumzap_engineer_blog:20210308091705p:plain
これまでのフロー

一目で無駄な部分が多いなと感じるかと思いますが、リリース前には、円滑なフロー作りの余裕はありませんでした。

少数のリソースを組み込む分には大きな問題にはなりませんでしたが、運用し始めると新しいイベントやキャラなどのリソースが頻繁に追加されます。
いよいよエンジニア側に限界が来て、このフローを改善する取り組みが開始されました。

私たちが最終的に目指すフローは、極力エンジニアからリソース組み込みの作業を切り離す下記のようなものです。

f:id:sumzap_engineer_blog:20210308091745p:plain
理想のフロー

しかし、煩雑な組み込み作業をいきなりデザイナーに渡すことができません。
そのため、まずは現状の作業を簡易化させることから着手しました。
現在、特に時間のかかる「手動でリソースをUnityプロジェクト上の指定フォルダに配置」と「手動でAddressable登録」を自動化するためツール①Asset Importer ②Addressable Registerを開発し、大幅にリソースの組み込みコストを削減することまでできました。

これらのツールについて紹介したいと思います。

f:id:sumzap_engineer_blog:20210308091858p:plain
現在のフロー

2つのツールの紹介

Asset Importer

Asset Importerは、リソースをUnityプロジェクト上の指定フォルダに自動で配置してくれるツールです。

f:id:sumzap_engineer_blog:20201228190529p:plain

ツールなしだと何をする必要があるか


f:id:sumzap_engineer_blog:20210309084655p:plain

まず、リソースの格納先や圧縮設定などがまとまっている指示書を見ながらリソースをUnityプロジェクト内に配置、設定しています。
また、リソースによってはそのまま画像として使うのではなく、Prefabの素材として割り当てることがあります。
1つのリソースであれば、それほど大変な作業ではありませんが、一つのイベントを開催するときに必要となるリソースは約15種類があり、とても時間がかかってしまいます。

AssetImporterができること

AssetImporterは以下の2点を可能にしてくれます。

  1. 配置するパスを知らなくても、Unityプロジェクト内の適切な場所にリソースを配置する
  2. 圧縮設定、Prefabを生成する

一つのイベントを例にすると、 まず、Unityのプロジェクト内に必要となるリソースをすべてイベント用のフォルダに追加します。

f:id:sumzap_engineer_blog:20201229140233p:plain

AssetImporterを開き、イベントのIDを入力し、Importボタンを押すと適切に位置に自動で配置してくれます。
また、画像の圧縮設定なども配置時に行ってくれます。

f:id:sumzap_engineer_blog:20201229140255p:plain

配置先や圧縮設定はScritableObjectで管理されています。

f:id:sumzap_engineer_blog:20210315174001j:plain

AddressableRegister

Unityプロジェクト内に格納されたファイルをAddressableに簡単に登録できるツール

f:id:sumzap_engineer_blog:20210315174104j:plain

ツールなしだと何をする必要があるか


f:id:sumzap_engineer_blog:20210308085811p:plain

  1. どこにリソースがあるかを調べる
  2. AddressableWindowに追加
  3. 登録名を変更する必要があれば、リネーム
  4. ラベルを追加

まず、リソースの格納先がまとまっている指示書を確認し、対象のリソースがどこに配置されているかを調べます。
その配置場所から対象のリソースをAddressableWindowにドラッグアンドドロップします。
このとき登録名を変更する必要があれば、リネームします。
SimplyNameボタンを押す。最後にラベルを追加します。
Unityプロジェクト内のアセットの配置と同様、1つのリソースであれば、それほど大変な作業ではありませんが、ファイル数が多くなると骨折れる作業になります。

AddressableRegisterができること

AddressableRegisterは以下の4点を可能にしてくれます。

  1. プロジェクト内のリソースのパスを知らなくても、Addressableに追加してくれる
  2. イベントなど複数のリソースを一度にAddressable登録することができる
  3. 登録名のリネームを自動で行ってくれる
  4. ラベルを追加

こちらも一つのイベントを例にすると、 まず、AddressableRegisterにイベントのIDを入力し、一括設定ボタンを押すと、Unityプロジェクト内からリソースを探してくれます。

登録ボタンを押すと、AddressableWindowに追加され、必要があれば、リネームも行います。

f:id:sumzap_engineer_blog:20210315174240j:plain

AssetImporterと同様に設定はScritableObjectで管理されています。

f:id:sumzap_engineer_blog:20210315174310j:plain

最後に

いかがでしたでしょうか。今回はリソース組み込みの効率化の取り組みについて紹介しました。
最終的な組み込みフローに到達できてませんが、AssetImporterとAddressableRegisterを導入することにより近づいているのではないかと考えています。
最後まで、読んでいただきありがとうございました。