【Unity】ディレクティブを使用しているときに発生するwarning対策

目次

ディレクティブとはなにか

Unityはプラットフォーム依存コンパイルという機能を持っています。これは、Unityで作成したゲームやアプリを複数のプラットフォームで動かしたい場合に、各プラットフォームに依存したコード(ファイルの保存領域、Bluetoothの使用)を1つのスクリプト内で書けるようにする仕組みです。

参考リンク

Unityドキュメント

なぜwarningが発生するのか

原因はプラットフォームに依存(ディレクティブ指定)しているコードは、Unity Editor上のコンパイルでは無視されることにあります。

無視されるということは、宣言した変数をEditor上で実行するときは使用していないと見られるケースが発生します。

この例では、スマホ用OS向けにビルドすることを考えてディレクティブを設定しています。記述上はNumberを使用してしますが、UnityEditorから見ると、Numberは使用されていない変数になります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//	この変数はUityEditor上では使用していないことになるのでwaringが発生する
int Number = 9;

private void test()
{
// ここはAndroid用にビルドしたときに初めて有効になる
#if UNITY_ANDROID
Number = 100;
#endif

// ここはiOS用にビルドしたときに初めて有効になる
#if UNITY_iOS
Number = 300;
#endif

...
}

対策方法

1. エディタ用のダミー処理を作る

上の例はEditor用の処理が書いてありませんでした。何かしらのダミー処理で変数を使うようにすればwarningの発生を抑える事ができます。それと同時にテストを書くときのことを考えても、内部処理はダミーでも実装しておいたほうがいいかと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

// ダミー処理で使っているのwarningは発生しない
int Number = 9;

private void test()
{
// ここはAndroid用にビルドしたときに初めて有効になる
#if UNITY_ANDROID
Number = 100;
#endif

// ここはiOS用にビルドしたときに初めて有効になる
#if UNITY_iOS
Number = 300;
#endif

// Unity Editor用のダミー処理
#if UNITY_EDITOR
Number = 0;
#endif

...
}

2. 1つのスクリプト内だけ特定のwarningを発生させない

プリプロセス命令をファイルの先頭に書くことによってコンパイル時の処理を指定する方法です。

以下のようなwarning表示が表示された場合、これを解決するにはCS0149というwarningを発生させないプリプロセス命令が必要になります。

1
test.cs(59,48): warning CS0149: xxxx

CS0149のwarningを発生させないようにするための記述は以下のようになります。

1
#pragma warning disable 0149

3. プロジェクト全体に対して発生させたくないwarningを指定する

この方法を取ると、指定したすべての条件に一致するものが表示されなくなってしまうので、設定する場合は慎重に行ってください。

.rspとは

MSBuild.exeのコマンドラインスイッチを含むテキストファイル。詳しくは以下リンクを参照。

MSBuild応答ファイル

設定手順

  1. Assetsフォルダ下にcsc.rspというファイルを作成してください。(Assets/csc.rsp)
    • UnityEditorでファイルを作成すると見た目上は、csc.rspに見えますが、拡張子がcsになってしまうので、エクスプローラーから作成する
  2. csc.rsp内に-nowarn:xxxxと記述する
    • xxxの部分は`warning時に表示される数字の部分です。
    • 複数指定したい場合は、記述した部分の下に追記してく

設定例

1
2
3
4
//	warning CS0149: xxxxの場合
-nowarn:0149
// warning CS0031: yyyyの場合
-nowarn:0031

【Unity】ディレクティブを使用しているときに発生するwarning対策

https://blog.djima.net/2021/03/28/【Unity】ディレクティブを使用しているときに発生するwarning対策/

Author

Daiki Iijima

Posted on

2021-03-28

Updated on

2024-04-17

Licensed under