ロゴ

ゲーム・エンターテイメント事業部から、Unityでアセットレギュレーションをテスト・自動化できるツール『Asset Regulation Manager』をOSSとしてリリースいたしました。
本記事ではこのツールを作った目的と、簡単な使い方についてまとめます。

コンセプト

Unityゲーム開発において「アセットレギュレーション」を厳密に管理することは重要です。 アセットレギュレーションの代表的な例として、テクスチャサイズやメッシュの頂点数が挙げられます。

例えばあるプロジェクトで、キャラクターのテクスチャサイズに対して 1024 × 1024 px 以内というレギュレーションを決めたとします。
もしこのレギュレーションが守られずに 2048 × 2048 px のテクスチャを使ってしまうと、ストレージやメモリの使用量が 4 倍になります。
これはロード時間の増大、ダウンロード時間の増大、メモリ使用量の増加(ひいてはアプリのクラッシュ)といった結果をもたらします。

テクスチャのレギュレーション

一部の項目は AssetPostProcessorPresetManager を使ってインポート時に自動設定することができますが、開発規模が大きくなるとやはり最終的にチェックできる仕組みが必要です。

Asset Regulation Manager を使うとこのようなアセットレギュレーションのテストを作成、実行、自動化することができます。

デモ

Asset Regulation Managerでできること

Asset Regulation Manager では、以下のようなエディタでテストを作成します。
対象のアセット群と、そのアセットが守るべき制約を指定します。

アセットレギュレーションエディタ

作成したテストは専用のビューワで確認・実行することができます。
テストしたいアセットを Project ビューのように検索し、ダブルクリックするだけでテストできます。
エンジニア以外の方でも直感的にレギュレーションを確認・テストできることを意識した作りになっています。

アセットレギュレーションビューワ

Jenkins などのツールと組み合わせれば、「毎日夜間に自動テストして失敗した項目の結果を Slack に投稿する」といったことが実現できます。CI

自動化までの流れ

次に Asset Regulation Manager を使ってアセットレギュレーションのテストを自動化するまでの流れを簡単にまとめます。

はじめに Asset Regulation Editor を使ってテスト項目を作成します。
まずテストの対象とするアセットを右側のパネルの Targets タブから設定します。
以下は Characters フォルダの全ての Texture2D を対象としている例です。

ターゲットを設定

次に Constraints タブで対象としたアセットが守るべき制約を設定します。
以下では最大テクスチャサイズとテクスチャフォーマットを設定しています。

制約を設定

こうして作成したアセットレギュレーションは Asset Regulation Viewer によって確認できます。
以下はプロジェクト内のテクスチャとそのレギュレーションを検索している例です。

アセットを検索

Run All ボタンを押下することで、各アセットのレギュレーションが守られているかテストすることができます。
テスト結果は下図のようにアイコンにより示され、Message 欄には実測値が表示されます。

テストを実行

次にテストの自動化のために、上記のテストをコマンドラインから実行します。
以下は Mac でコマンドライン実行を行う例です。

/Applications/Unity/Hub/Editor/2019.4.33f1/Unity.app/Contents/MacOS/Unity -projectPath [Your Project Path Here] -executeMethod AssetRegulationManager.Editor.Core.Tool.Test.AssetRegulationTestCLI.AssetRegulationTestCLI.ExecuteTests

これを実行すると、 AssetRegulationManager/test_result.txt に、以下のような内容が出力されます。

Assets/Development/Charcters/tex_character_001_albedo.png
[Success] Texture Format: (ASTC_4x4 || ASTC_6x6) in iPhone | Actual Value: ASTC_6x6
[Success] Max Texture Size: 1024 x 1024 | Actual Value: 256 x 256

Assets/Development/Charcters/tex_character_005_albedo.png
[Success] Texture Format: (ASTC_4x4 || ASTC_6x6) in iPhone | Actual Value: ASTC_4x4
[Failed] Max Texture Size: 1024 x 1024 | Actual Value: 2048 x 2048

...

あとは Jenkins などの CI/CD ツールでこれを定期実行し、結果ファイルを Slack などに送信するように設定すれば自動化完了です。

その他の機能

Asset Regulation Manager には上記で紹介した機能以外にも様々な機能を実装しています。

  • Targets、Constraints の多様な指定方法(独自の指定方法を作成することも可能)
  • コピペや Undo/Redo などのGUIツールに必要な機能一式
  • 結果をテキストではなくJson形式で書き出すオプション
  • GUIツールを使わずにスクリプトから操作するフロー

詳細はドキュメントに掲載していますので、こちらからご覧ください。

ライセンスについて

Asset Regulation Manager は MIT ライセンスで公開しています。 ライセンスの範囲内で自由に使っていただけますが、使用の際は以下の著作権表示とライセンス表示が必須となります。

https://github.com/CyberAgentGameEntertainment/AssetRegulationManager/blob/main/LICENSE.md

インストールはこちらから(日本語ドキュメント)

インストールやセットアップ手順については以下のドキュメントを参照してください。

https://github.com/CyberAgentGameEntertainment/AssetRegulationManager/blob/main/README_JA.md