Unity コードインスペクション
ReSharper のコードインスペクション機能は、Unity 専用の C# コードでもサポートされています。 これらの機能の詳細については、 コードインスペクションでコードの問題を見つける セクションの該当トピックを参照してください。
コードインスペクションの例とクイックフィックス
ReSharper は、不明なシーン、タグ、レイヤーに対して警告を表示します。
ソリューション全体の分析 が有効化されている場合、ReSharper は暗黙的に使用されているフィールドやイベント関数を認識し、それらを未アクセスとしてハイライトしません。
空のイベント機能は、デッドコードとして表示され、削除する クイックフィックスがあります。
NetworkBehaviour以外のクラス内でSyncVarAttributeを使用すると、エラーとして扱われます。未解決のシンボルを使用してシリアル化フィールドを作成するには、クイックフィックスが推奨されます。
ReSharper はすべてのイベント関数が正しいシグネチャーを持っているか確認します。間違ったシグネチャーをハイライトし、それを修正するクイックフィックスを提案します:
ReSharper は、
tagプロパティで非効率的な文字列リテラル比較の使用を警告し、CompareTagを呼び出すように修正するクイックフィックスを提供します。MonoBehaviourまたはScriptableObjectから派生したクラスの新しいインスタンスをnewキーワードで生成しようとすると、ReSharper から警告されます。 代わりにgameObject.AddComponent<T>()またはScriptableObject.CreateInstance<T>()を使用することをお勧めします。[InitializeOnLoad]および[InitializeOnLoadMethod]属性のインスペクションもあり、正しいメソッドやコンストラクターのシグネチャーがあるか確認されます。また、クラスに静的コンストラクターがない場合は ReSharper が冗長な[InitializeOnLoad]属性をグレーアウトし、クイックフィックスで属性を削除またはコンストラクターを作成できます。
Unity 固有のコード一覧インスペクション
Unity (47 インスペクション)
このカテゴリのインスペクションは、 Unity(英語) プロジェクトに固有のコードの問題を報告します。
インスペクション | |
|---|---|
代替の非割り当てメソッドが利用可能 | |
PropertyDrawer から派生したクラスでは "base.OnGUI()" を避けてください | |
コンポーネントまたはスクリプタブルオブジェクトを解決できません | |
DOTS: IAspect フィールドは次のいずれかの型である必要があります: RefRW、RefRO、EnabledRefRW、EnabledRefRO、DynamicBuffer、Entity | |
DOTS: 型キーワードの不一致 | |
DOTS: 指定された型は構造体型でなければなりません | |
同名のイベント関数がすでに宣言されています | |
「Component」または「MonoBehaviour」から派生した型が必要です | |
「ScriptableObject」から派生した型が必要です | |
「ComponentLookup」タイプのフィールドは、使用する前に更新する必要があります。 | |
ファイル名はアセンブリの名前と一致する必要があります | |
グループパスが定義されていません | |
メソッドシグネチャーが正しくありません | |
オーディンのグループ属性タイプが正しくありません | |
メンバーが複数の UI グループに同時に表示される | |
文字列リテラルで参照されているメソッドには、予期されたシグネチャーがありません | |
「MonoBehaviour」インスタンスは、「new」ではなく「GameObject.AddComponent<T>()」でインスタンス化する必要があります | |
パラメーターは「コンポーネント」から派生する必要があります | |
複数のフィールドへの属性の誤った適用の可能性があります | |
基盤となる Unity エンジンオブジェクトの有効期間チェックの意図しないバイパスの可能性 ('UnityEngine.Object' から派生した型の null 合体は、基礎となる Unity エンジンオブジェクトの有効期間チェックをバイパスする) | |
基盤となる Unity エンジンオブジェクトの有効期間チェックの意図しないバイパスの可能性 ('UnityEngine.Object' から派生した型で null が伝播すると、基礎となる Unity エンジンオブジェクトの有効期間チェックがバイパスされます。) | |
基盤となる Unity エンジンオブジェクトの有効期間チェックの意図しないバイパスの可能性 ('UnityEngine.Object' から派生した型のパターンマッチング null チェックは、基礎となる Unity エンジンオブジェクトの有効期間チェックをバイパスする) | |
GUID ベースのアセンブリ参照を優先する | |
冗長な属性の使用 (属性は、この宣言型に適用すると冗長です) | |
冗長な属性の使用 (冗長な「FormerlySerializedAs」属性) | |
冗長な属性の使用 (冗長な「HideInInspector」属性) | |
冗長な属性の使用 (冗長な「InitializeOnLoad」属性) | |
冗長な属性の使用 (冗長な「SerializeField」属性) | |
冗長な Unity イベント関数 | |
組み込みコンポーネントのプロパティへの繰り返しアクセスは非効率的です | |
シーンが存在しません | |
ビルド設定でシーンが無効化されています | |
「ScriptableObject」インスタンスは、「new」ではなく「ScriptableObject.CreateInstance<T>()」でインスタンス化する必要があります | |
オブジェクトのインスタンス化の直後に「親」プロパティを設定するのは非効率的です | |
短いシーン名が一意ではありません | |
文字列ベースのグラフィックスプロパティルックアップは非効率的です | |
コンポーネントタイプの文字列ベースのルックアップは非効率的です | |
ビルド設定にインデックスがありません | |
入力名が入力マネージャーで定義されていません | |
レイヤーが「タグとレイヤー」で定義されていません | |
プロジェクトでリソースが定義されていません | |
別のメニュー項目に同じショートカットが定義されています | |
タグが「タグとレイヤー」で定義されていません | |
プロジェクト内に同名のアニメーターステートがありません。 | |
ビルド設定に同名のシーンがありません | |
関数内で 'GetSingleton' 呼び出しの結果を使用するには、'OnCreate' に 'RequireForUpdate' 呼び出しを含める必要があります。 | |
明示的な文字列比較の代わりに「CompareTag」を使用する |
Unity バーストコンパイラーの警告 (17 インスペクション)
このカテゴリのインスペクションは、コードが実際にコンパイルされる前に Unity バーストコンパイラー(英語)の警告を報告します。
インスペクション | |
|---|---|
マネージドインデクサーへのアクセスはサポートされていません | |
マネージドメソッドへのアクセスはサポートされていません | |
ボクシングはサポートされていません | |
バースト: String.Format(format, ...) 引数の型が無効です | |
バースト: この変数は System.String に解決されるため、Burst コンパイルされたコールスタックで無効なマネージドメソッド呼び出しが発生する可能性があります。 | |
マネージ型の作成はサポートされていません | |
デバッグログ関数は文字列のみを受け入れます | |
関数シグネチャーにマネージ型を含めることはできません | |
非読み取り専用の静的フィールドからの読み込みはサポートされていません | |
マネージ型の読み込みはサポートされていません | |
共有静的型パラメーターにはアンマネージ制約が必要です | |
一部の SharedStatic`1.GetOrCreate オーバーロードによってコンパイラーエラーが発生します | |
String.Format(format, ...) は文字列リテラルと const 文字列のみを受け入れます | |
'foreach' 構造はサポートされていません | |
Try ステートメントはサポートされていません | |
Typeof は Burst では禁止されています | |
静的フィールドへの書き込みはサポートされていません |
Unity パフォーマンスインスペクション (5 インスペクション)
このカテゴリのインスペクションは、計算効率の悪いパターン Unity(英語) プロジェクトを報告します。
インスペクション | |
|---|---|
「Camera.main」は高負荷です | |
高負荷なメソッド呼び出し | |
高負荷な null 比較 | |
乗算演算の順序が非効率的です | |
多次元配列の代わりにジャグ配列または一次元配列を使用してください |