コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】シーンやプレハブの静的解析を行うことができる「Mooble」紹介

はじめに

「Mooble」を Unity プロジェクトに導入することで
シーンやプレハブの静的解析を行うことができるようになります

使い方

f:id:baba_s:20181217141007p:plain

Unity メニューの「Mooble>Static Analysis」から
シーンとプレハブどちらの静的解析を行うのかを選択します

f:id:baba_s:20181217141001p:plain

すると「Mooble」ウィンドウが表示されて静的解析の結果を閲覧できます

f:id:baba_s:20181217141123p:plain

1つのゲームオブジェクトに同じコンポーネントが複数アタッチされていたり

f:id:baba_s:20181217141127p:plain

アタッチされているコンポーネントが無効化されていたり

f:id:baba_s:20181217141205p:plain

アタッチされているコンポーネントが見つからなかったり

f:id:baba_s:20181217141132p:plain

コンポーネントのプロパティが設定されていなかったりすると

f:id:baba_s:20181217141001p:plain

それが静的解析の結果に表示されるようになります

拡張

Rule<> を継承したクラスや IViolation を実装したクラスを定義することで
独自の静的解析のルールを追加することもできます

設定

{
  "PrefabLocations": [
    "Assets/Prefabs"
  ],
  "Rules": [
    {
      "Name": "NoDuplicateComponents",
      "ViolationLevel": "Warning",
      "ViolationScope": "Both",
      "Exclusions": []
    },
    {
      "Name": "NoMissingComponents",
      "ViolationLevel": "Error",
      "ViolationScope": "Both",
      "Exclusions": []
    },
    {
      "Name": "NoMissingObjectReferences",
      "ViolationLevel": "Warning",
      "ViolationScope": "Both",
      "Exclusions": []
    },
    {
      "Name": "NoInactiveBehaviours",
      "ViolationLevel": "Warning",
      "ViolationScope": "Both",
      "Exclusions": [ "UnityEngine.Animator, UnityEngine", "UnityEngine.FlareLayer, UnityEngine" ]
    },
    {
      "Name": "NoImageWithMissingSprite",
      "ViolationLevel": "Error",
      "ViolationScope": "Both",
      "Exclusions": []
    }
  ]
}

「moobleconfig.json」に静的解析の設定を記述することができます

コマンドライン実行

Unity.exe -quit -batchmode -projectPath "【Unity プロジェクトのパス】" -executeMethod "Mooble.StaticAnalysis.CLI.RunPrefabAnalysis" "Assets\Prefabs\0001.prefab" -logFile "result.txt"

上記のようにコマンドラインから静的解析を行うこともできます