mcpField
U
Unity Perf Audit

Unity Perf Audit

github.com/juliankerignardテスト・品質861 回インストール31 週間前に更新
リポジトリ

Unity Perf Audit について

Unity Perf Audit は、Unity プロジェクトの C# スクリプトを静的に調べ、CPU、GPU、メモリのパフォーマンス上のアンチパターンを検出するスキルです。ゲームの実行や外部パッケージを必要とせず、重大度、ファイルと行番号、優先修正案をまとめます。

主な機能

  1. 01C# ファイルとプロジェクト構成の一覧化
  2. 02CPU、GPU、メモリのパターン検査
  3. 03重大度に基づく問題の順位付け
  4. 04ファイルと行番号の特定
  5. 05優先修正案と変更前後のコード

活用シーン

  1. 01ビルド前の Unity プロジェクト監査
  2. 02報告された低フレームレートの調査
  3. 03スタッターやメモリ増加に絞った検査
  4. 04描画関連のパフォーマンスパターン確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/juliankerignard/unity-skills --skill unity-perf-audit

インストール後、Claude Code で/unity-perf-auditを入力して読み込まれたか確認します。

同梱ファイルreferences/anti-patterns.md

詳細

Unity Perf Audit

このスキルでできること

Unity プロジェクトの C# コードを静的解析し、パフォーマンスのアンチパターンを検出します。ゲームの実行やプロファイリングは不要です。Grep と Glob でソースコードをスキャンします。

出力内容:

  • プロジェクト内の C# ファイルの一覧(件数、サイズ、大きなファイル)
  • 検出したアンチパターンのレポート(深刻度と場所を含む)
  • 優先度の高い修正案 5 件(修正前/修正後のコード付き)

前提条件

  • Assets/ に C# スクリプトがある Unity プロジェクト
  • プロジェクトフォルダーへの読み取りアクセス
  • パッケージや外部ツールは不要

判断フロー

Symptome rapporte ?
|
+-- FPS bas en general --> Lancer le scan complet (etapes 1-5)
+-- Spikes ponctuels / stuttering --> Focus CPU (anti-patterns C1-C12)
+-- Memoire qui grimpe / crashs OOM --> Focus Memory (anti-patterns M1-M7)
+-- Rendu lent, draw calls hauts --> Focus GPU (anti-patterns G1-G5)
+-- Pas de symptome precis (audit preventif) --> Scan complet

クイックスタート

  1. プロジェクトの構造をスキャンする(Glob **/*.cs)
  2. CPU、GPU、メモリのアンチパターンを検出する(Grep)
  3. 各問題をスコアリングして分類する
  4. ファイル名と行番号を含むレポートを作成する
  5. 優先度の高い修正案を 5 件提示する

ステップごとのガイド

ステップ 1:プロジェクトの構造をスキャンする

Glob を使って、プロジェクト内の C# ファイルをすべて一覧にします。

Glob: Assets/**/*.cs

分析項目:

  • .cs ファイルの総数
  • 500 行を超えるファイルを特定する(Read で行数を数えるか、wc -l を使用)
  • スクリプトが最も多いフォルダーを特定する(プロジェクトの構造)
  • 分析対象から Plugins/、ThirdParty/、TextMesh Pro/ フォルダーを除外する(外部コード)

すべてのファイルの行数を数える Bash コマンド:

find <project>/Assets -name "*.cs" -not -path "*/Plugins/*" -not -path "*/ThirdParty/*" -not -path "*/TextMesh Pro/*" | xargs wc -l | sort -rn | head -20

概要を作成します:

## Structure projet
- **Fichiers C#** : 47
- **Lignes totales** : 12,340
- **Fichiers > 500 lignes** : PlayerManager.cs (623), GameController.cs (891)
- **Dossiers principaux** : Scripts/ (28), UI/ (12), Enemies/ (7)
ステップ 2:アンチパターンを検出する

C# ファイルをスキャンして、CPU、GPU、メモリのアンチパターンを検出します。検出対象のパターンの完全な一覧については、references/anti-patterns.md を参照してください。

検出した項目ごとに、ファイル、行番号、コード行を記録します。除外対象を除く、プロジェクト内のすべての .cs ファイルに対して Grep 検索を実行します。

ステップ 3:スコアリングして分類する

ファイルごと、および全体のスコアを付けます。

深刻度ポイント影響
致命的10目に見えるラグを直接引き起こす(毎フレーム)
高5高負荷時に大幅なパフォーマンス低下を引き起こす
中2プロファイラーで測定可能な影響がある
低1ベストプラクティス。影響は最小限

全体スコア:

  • 0-10:問題なし。対応は不要です。
  • 11-30:許容範囲です。いくつかの問題を修正してください。
  • 31-60:問題があります。ビルド前の修正を推奨します。
  • 61+:重大です。修正が必須です。

コード内で実際に見つかった問題のみをスコアリングします。仮定上の問題を決して作り出さないでください。

ステップ 4:レポートを作成する

レポートの形式:#、Probleme、Severite、Fichier:Ligne、Description の列を含む表。深刻度の高い順(致命的 > 高 > 中 > 低)にグループ化します。深刻度ごとの概要(件数 + スコア)を追加します。判定(問題なし/許容範囲/問題あり/重大)と全体スコアを含めます。

ステップ 5:優先度の高い修正案を 5 件提示する

修正案ごとに、修正前と修正後のコードを示します。深刻度の高い問題から順に選びます(まずは致命的な問題)。形式:タイトル、深刻度、行番号、影響、修正前/修正後のコード。

一般的な修正パターン:

アンチパターン標準的な修正方法
Update 内の GetComponentAwake でプライベートフィールドにキャッシュする
実行時の FindAwake でキャッシュするか、SerializeField 経由で注入する
Update 内の Camera.mainprivate Camera _cam; void Awake() => _cam = Camera.main;
Update 内の文字列連結StringBuilder または string.Format を使うか、ログを削除する
Update 内の Instantiateオブジェクトプーリング(Queue + 有効化/無効化)を使う
Update 内の foreachList<T> を使った for ループにする
SendMessage直接インターフェースまたは C# イベントを使う
.tag ==.CompareTag("name") にする
new WaitForSeconds の繰り返しstatic readonly WaitForSeconds としてキャッシュする
イベントの購読解除漏れOnDisable() または OnDestroy() に -= を追加する
Unload のない Resources.Load使用後に Resources.UnloadUnusedAssets() を追加するか、Addressables に移行する

厳格なルール

必ず守ること:

  • 実際のコードで見つかった問題のみ報告する(推測はしない)
  • 各問題について、ファイルと正確な行番号を示す
  • コードの修正例を修正前・修正後で具体的に提示する
  • 影響度の高い順に優先順位を付ける(Critical を最初にする)
  • サードパーティーのコード(Plugins/, ThirdParty/, TextMesh Pro/)は対象外にする
  • コンテキストを確認する:Start() 内の GetComponent は許容されますが、Update() 内では問題です

絶対にしてはいけないこと:

  • 一度しか実行されないコード(Start、Awake、OnEnable の初回実行、ローディング画面)の最適化を提案する
  • コードに存在しない問題をでっち上げる
  • 大規模なリファクタリングを勧める(ホットパスを修正し、アーキテクチャには手を加えない)
  • 外部ツールや有料パッケージを提案する
  • ホットパス外の固定コレクションに対する foreach を問題として報告する
  • 誤検出を無視する:問題のあるコンテキストで該当パターンが使われていることを確認してから報告する

関連スキル

  • 特定のパフォーマンスバグ(クラッシュ、一時的なフリーズ)を診断しますか?/unity-debug(Unity Debug)を使用します
  • 検出された問題を構造的なリファクタリングで修正しますか?/unity-refactor(Unity Refactor)を使用します
  • 修正後にテストしますか?/unity-test(Unity Test)を使用します

トラブルシューティング

問題解決策
GetComponent の誤検出が多すぎる外側のメソッドを確認します。Awake/Start/OnEnable 内の GetComponent は問題ありません。Grep で -B 20 を使い、コンテキストを確認します。
コメント内でパターンが検出される// で始まる行、または /* */ ブロック内の行を除外します。ファイルを読んで確認します。
ファイルが大きすぎて分析できないoffset/limit を指定してセクションごとに読みます。Update、FixedUpdate、LateUpdate メソッドに注目します。
プロジェクトに Assets/ フォルダーがないプロジェクトのパスを確認します。Unity プロジェクトのルートを確認するようユーザーに依頼します。
プロトタイプのスコアが非常に高い状況を考慮します。プロトタイプに高度な最適化は必要ありません。問題点には触れつつ、緊急度を下げます。
無効化されたコードにアンチパターンがある#if/[System.Obsolete]/デッドコードを示すコメントがないか確認します。デッドコードは報告しません。
.cs ファイルが見つからないプロジェクトが空か、スクリプトがパッケージ内にある可能性があります。フォルダーのフィルターを付けずに Glob **/*.cs で確認します。
イベントリークの誤検出パターンを確認します。+= が OnEnable にあり、-= が OnDisable にあれば問題ありません。匿名ラムダ(登録解除できません)も確認します。

アンチパターンの完全な一覧については、references/anti-patterns.md を参照してください。

コメント