unityでいってみよう!

unityがチョットワカル位の人のブログ

UnityDataToolsのREADMEを日本語化してみよう!

概要

UnityDataToolsはUnity2022.1で追加されたUnityFileSystemApiで何が出来るのかを検証する為のプロジェクトで、GitHub上で公開されており、下記はREADME.mdを日本語化したものになります。

UnityDataTools

UnityDataToolは、UnityFileSystemApiネイティブダイナミックライブラリで何ができるかを紹介するコマンドラインツールのセットです。これらのツールの主な目的は、Unityデータファイルの内容を分析することです。コマンドラインツールUnityDataToolの使い方を理解することが目的であれば、ここに直接ジャンプすることができます。

UnityFileSystemApiライブラリは、UnityエディタのToolsフォルダで配布されています(バージョン2022.1.0a14から)。簡略化のため、このリポジトリにも含まれています。このライブラリは後方互換性があり、以前のどのバージョンのUnityでも生成されたデータファイルを読み込むことができます。

ネイティブライブラリ「UnityFileSystemApi」の目的は何ですか?

UnityFileSystemApiの目的は、WebExtractとbinary2textツールの機能を、より柔軟な方法で公開することです。その意味を十分に理解するために、まず、Unityがビルド内のデータファイルをどのように生成するのかについて説明します。ビルド内のシーンから参照されるデータは、プレイヤーデータと呼ばれます。これは、プラットフォーム固有のフォーマットでアセットを含むSerializedFilesと呼ばれるファイルのセットです。AssetBundlesやAddressableを使用する場合は、少し事情が異なります。AddressablesはAssetBundleであり、このドキュメントではAssetBundleという言葉しか使わないので、注意してください。

AssetBundleは、実行時にマウントすることができるアーカイブファイル(zipファイルに似ている)です。Player Dataと同じようにSerializedFileが含まれていますが、TypeTree1と呼ばれるものが含まれています。TypeTreeはオブジェクトがどのようにシリアライズされたかを示すデータ構造で、プロパティの名前、タイプ、サイズなどを表します。これは、以前のUnityのバージョンでビルドされたAssetBundleを読み込む際にUnityによって使用されます(そのため、プロジェクトを新しいバージョンのUnityにアップグレードした後、必ずしもすべてのAssetBundleを更新する必要はありません)。

TypeTreeを含むSerializedFileの内容は、UnityのToolsフォルダにあるbinary2textというツールを使って人間が読める形式に変換することができる。AssetBundlesの場合は、まずToolsフォルダにあるWebExtracツールでSerializedFileを展開する必要があります。Player Dataの場合は、残念ながらTypeTreeがないので、これらのツールは使えません2。binary2text が生成するテキストファイルは、ビルドの問題を診断するのに非常に有用ですが、通常は非常に大きく、ナビゲートするのが困難です。このため、AssetBundle Analyzerというツールが作成され、これらのファイルからSQLiteデータベースの形式で有用な情報を簡単に抽出できるようになりました。AssetBundle Analyzerはかなり成功しましたが、いくつかの問題点があります。プロジェクトのすべての AssetBundle に対して WebExtract と binary2text を実行し、非常に大きなテキスト ファイルをパースしなければならないため、非常に時間がかかります。また、binary2text が使用する構文は標準的ではなく、場合によっては解析が不可能なこともあるため、簡単に失敗することがあります。

前述の通り、UnityFileSystemApiはWebExtractとbinary2textの機能を公開するために作成されています。これにより、TypeTreeを用いたUnityのデータファイルを読み込むツールを作成することができる。これを使えば、任意のフォーマットでデータを出力できるbinary2textのようなツールや、より高速でシンプルな新しいAssetBundle Analyzerを簡単に作成することができるようになる。

リポジトリの内容

リポジトリには、以下の項目が含まれています。

  • UnityFileSystem: .NET クラスライブラリ、または UnityFileSystemApi ネイティブライブラリのソースコード
  • UnityFileSystem.Tests: UnityFileSystem ライブラリのテストスイート
  • UnityFileSystemTestData:テストデータを生成するために使用するUnityプロジェクト
  • UnityDataTool: Unityデータファイルの内容を解析するために使用できるいくつかの機能を提供するコマンドラインツールで、以下のライブラリを使用します。
  • Analyzer: a library exposing functions that can extract key information from Unity data files and dump it into a SQLite database (similar to the AssetBundle Analyzer).
  • TextDumper: SerializedFileを人間が読める形式にダンプする機能を持ったライブラリ(binary2textに似ている)。
  • ReferenceFinder: UnityDataAnalyzerで作成したデータベースを用いて、オブジェクトから他のオブジェクトへの参照連鎖を見つけることができる関数を提供するライブラリ

構築方法

このソリューションのプロジェクトは、.NET 5.0 SDKを必要とします。ビルドするには、お気に入りのIDEを使用することができます。これらはWindowsVisual StudioMacのRiderでテストされました。

また、このコマンドを使用してCLIからプロジェクトをビルドすることも可能です。

dotnet build -c Release

免責事項

このプロジェクトは「現状有姿」で提供され、Unityの公式サポート対象ではありません。UnityFileSystemApiを使って何ができるかの一例として提供される実験的なツールです。バグ報告やプルリクエストは可能ですが、対応される保証はありません。


脚注:
1: AssetBundlesはデフォルトでTypeTreeを含みますが、DisableWriteTypeTreeオプションで無効にすることが可能です。
2: Unityのカスタムビルドで、TypeTreeを含むプレイヤーデータファイルを生成することは可能でしょうか。