【Unity】Unityプロジェクトをあらゆる観点から静的解析してくれる公式ツール『Project Auditor』の使い方まとめ

Unityプロジェクトをあらゆる観点から静的解析してくれる公式ツール『Project Auditor』の使い方をまとめました

Unity 2021.3.0f1
Project Auditor 0.8.1-preview

はじめに

Project Auditor を使うと Unity プロジェクトを精的解析し、パフォーマンスなどの観点で問題のあるコードやリソース、設定項目を洗い出すことができます。

開発は Unity 社員により Unity-Technologies のリポジトリで行われていますが、現状は公式サポートはされていないかつ Preview 版のライブラリとなります。

本記事ではこのツールの使い方についてまとめます。
前述の通りまだ Preview 版なので仕様は執筆時点と変わる可能性があるのでご注意ください。

インストール

Project Auditor は PackageManager からのインストールが推奨されています。
Window > Package Manager > +ボタン を押下後、以下を入力することでインストールできます。

基本的な使い方

解析実行フロー

解析を実行するにはまず Window > Analysis > Project Auditor からウィンドウを開きます。

Open Project Auditor

ウィンドウが開いたら、右下の Analyze ボタンを押下します。
プロジェクトの規模によっては処理に時間がかかるので注意してください。

Analyze

解析が終わると、以下のようにサマリーが表示されます。

Summary

左上から、各解析項目のページに切り替えることができます。
各項目の説明については後述します。

各項目

ビルドレポートを見る場合

さて、大体の項目については上記の手順で解析が行えますが、ビルドに関する解析であるBuild Reportについては、解析実行前に手順が必要です。

まず Assets/Editor/ProjectAuditorConfig.asset の Inspector から Save Build Reports にチェックを入れます。

Save Build Reports

この状態で、一度ビルドを実行します。
ビルドを実行すると Assets/BuildReports 内に BuildReport ファイルが生成されます。
この状態でもう一度 Project Auditor の Analyze ボタンを押下することで、Build Report が表示されるようになります。

Build Report の解析結果の見方は後述します。

スクリプトから実行する

以下のように、スクリプトから解析を実行することもできます。

using System.Linq;
using Unity.ProjectAuditor.Editor;
using UnityEditor;
using UnityEngine;

public static class Example
{
    public static void Audit()
    {
        var configAssetPath = AssetDatabase.FindAssets($"t: {nameof(ProjectAuditorConfig)}")
            .Select(AssetDatabase.GUIDToAssetPath)
            .FirstOrDefault();
        var projectAuditor = new ProjectAuditor(configAssetPath);
        var projectReport = projectAuditor.Audit();
        var codeIssues = projectReport.GetIssues(IssueCategory.Code);
        Debug.Log(codeIssues.Count);
    }
}

各解析項目の説明

この節では各解析項目の説明を行います。
現状Preview版なので、項目については大きく変わる可能性がありそうです。
また、現状Experimentalな機能には一旦触れません。

Code > Diagnostics

スクリプティング上の問題を解析します。
ホットパス(Updateのような頻繁に呼ばれる部分)に問題がある場合、Critical カラムにマークが表示されます。

以下は OnWillRenderObjectRenderer.sharedMaterials を呼んでしまっておりアロケーションしているので、代わりに Renderer.GetSharedMaterials() を呼ぶように警告されています。

Code Diagnostics

誤検知された項目はミュートすることで次回の解析からは省かれます。

Code > Assemblies

アセンブリごとのコンパイル時間や依存関係を見ることができます。

Assemblies

Code > C# Compiler Messages

コンパイラのメッセージを見ることができます。

C# Compiler Messages

Assets > Resources

Resources フォルダに含まれるアセットを一覧表示できます。

Resources

Assets > Shaders

プロジェクト内のシェーダの情報を見ることができます。
ビルドレポートが存在していればバリアントの数なども見れます。

Shaders

Assets > Shader Variants

ビルドされたシェーダバリアントの情報を見ることができます。

Shader Variants

Settings > Diagnostics

Project Settings や Player Settings の設定項目のうち、問題がありそうな点を解析してくれます。
Unity は設定項目が多くて重要な設定を忘れがちですが、それらを検知してくれるのに加えて Details や Recommendation 詳細を説明してくれるのでとても便利です。

Settings Diagnostics

Build Report > Steps

ビルド時の各ステップにかかった時間やビルド中の警告について見ることができます。

Build Steps

Build Report > Size

ビルドのバイナリサイズの内訳を見ることができます。

Build Size

参考

github.com