【Unity】複数の警告を無視する

インスペクタからオブジェクト等をセットする際、public変数にする方法と、privateで[SerializeField]属性をつける方法があります。
私は後者をよく使うのですが(ボッチ開発だけどpublicは使わないw)、スクリプト内で初期値を設定していないとwarningが出るんですよね。
これを踏まえて、警告を制御する方法をご紹介します。

  • Unityバージョン:2019.3.0a8
  • ランタイム:.NET4.x

[SerializeField]privateするとどうなるか

f:id:s44511173:20190724123036p:plain

上図のような警告がコンソールに表示されます。
出ている警告は、CS0649ですね。これは「値が割り当てられていない、初期化されていないプライベート フィールドまたは内部フィールドの宣言が検出されました。」という警告です。

docs.microsoft.com

スクリプト内で警告を制御する(C#

 これを消す手段の一つとして、スクリプト内で警告を制御する方法があります。
警告が出ているスクリプトファイル内で、次を宣言します。

#pragma warning disable 649

ただし、警告が出ているすべてのスクリプトファイル内で宣言する必要があるため、ちょっとめんどくさいですよね。

csc.rspファイルを作る

便利な方法として、Assets/csc.rspファイルを作成し、以下を記述します。

-nowarn:0649

csc.rspとは、defineをグローバルに定義できるファイルのようです。
つまりここに警告無視を宣言しておけば、すべてのスクリプトで参照されるということになります(多分・・・)。
なお、.NET3.5以下を使用している場合はcsc.rspではなく、msc.rspファイルになるようです。

docs.unity3d.com

 

結論

  • privateな[SerializeField]は、警告が出る
  • 警告を消す方法は、該当ファイルに「pragma・・・」を定義する方法と、Assets/csc.rspに「-nowarn・・・」を定義する方法とがある
  • .NET3.5以下の場合、msc.rspを使用する

 

atelier-hinata.hatenablog.com