[Unity] ifと#ifの違いって何?プリプロセッサとは

Unityで開発をしていると、

  • #if
  • #else
  • #endif

といった文を見かけることがありませんか?
これはプリプロセッサを命令する文なのですが、 

このページでは、

  • if と#if の違い
  • プリプロセッサとは
  • プリプロセッサの使い方

を説明します。

 

| if と#if の違い

簡単に言うと、

  • if文は、実行中に条件を判別する
  • #ifは、コンパイルの前に条件を判別する

という違いがあります。

つまり、if文は実行中に条件が変化するもの、一方で #ifは実行中に条件が変化しないものです。

そして、#if はプリプロセッサへの命令の文となっています。

 

| プリプロセッサとは

プリプロセッサとは一言でいうと、“コンパイルをする前の処理” です。

特に、

  • #if
  • #elif
  • #else
  • #endif

を用いると、コンパイルをする前に条件を判断して、条件にあうものはそのままコンパイルして、条件に合わないものはコンパイルする前に取り除くという動きが実現できます。

これを用いることにより、コンパイルするコードの量を減らして負荷を軽減させることができます。

 

| プリプロセッサの使い方

プリプロセッサを使ったコードを用いて説明していきます。

 

このコードは、コンパイル時のプラットフォームが

  • iOS
  • Android
  • Unity Editor
  • その他

のどれであるかを判別するコードです。

プラットフォームが “iOS” のときと、”Android”のときを例に考えてみましょう。

 

プラットフォームが “iOS” の場合

 

プラットフォームが “iOS” のため、UNITY_IOSのみ定義され条件が正しくなるので、10行目だけがコンパイルされます。

  • #if
  • #elif
  • #else

は条件が合っていようが、合ってなかろうがコンパイルの際には取り除かれます。

#endif はどこまでが if文なのかをプリプロセッサに知らせるための文です。

 

プラットフォームが”Android” の場合

 

プラットフォームが”Android” のため、UNITY_ANDROIDのみ定義され条件が正しくなるので、7行目だけがコンパイルされます。

 

このように、条件に合う文のみをコンパイルして他の文を取り除くことで、負荷を軽減させることができます。

開発においては必須の機能ですのでぜひ、ご活用ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です