ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - 条件付きコンパイルディレクティブ

初めに

 条件付きコンパイルディレクティブは、プログラムの特定の部分をコンパイルするかどうかを制御するために使用される Unity の C# の機能です。これを使うことで、特定のプラットフォーム、ビルド設定ごとにコードの一部を条件付きで有効または無効にすることができます。本記事では、条件付きコンパイルディレクティブの仕方を説明します。

条件付きコンパイルディレクティブとは

 条件付きコンパイルディレクティブは、プログラムの特定の部分をコンパイルするかどうかを制御するために使用される Unity の C# の機能です。これを使うことで、特定のプラットフォーム、ビルド設定ごとにコードの一部を条件付きで有効または無効にすることができます。

条件付きコンパイルの仕方

基本的な使い方

 次のように "#if" や "#endif" などを用いて、条件付きコンパイルをします。

# if UNITY_EDITOR  //プラットフォームがUnity Editorの場合

    Debug.Log("Unity Editor");

# elif UNITY_IOS  //プラットフォームがiOSの場合

    Debug.Log("Unity iOS");

# else

    Debug.Log("Any other platform");

# endif

 特定のスクリプトシンボルが定義されている か 定義されていないか によって、コードを選択的にコンパイルに入れたり除外したりすることができます。

 スクリプトシンボルは UNITY_EDITOR や UNITY_IOS のようなプラットフォームに関するもの、UNITY_2019_4 のようなエディターバージョンに関するものなどがあります。#define を使うことで、スクリプトシンボルを自分で定義することもできます。#define の使い方はこちら

 "#elif" や "#else" は省略可能です。

スクリプトシンボル

 デフォルトで用意されているプラットフォームやエディターバージョンのスクリプトシンボルについては、公式のドキュメントにまとめてありますので、そちらをご覧ください。

docs.unity3d.com

スクリプトシンボルを自作する

 #define を使うことでスクリプトシンボルを自作することができます。

#define ScriptSymbolTest  //スクリプトシンボルの定義

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ApplicationSample : MonoBehaviour
{
    public void onClick()
    {
        #if ScriptSymbolTest
            Debug.Log("スクリプトシンボルのテスト");
        #else
            Debug.Log("ScriptSymbolTestが定義されていない");
        #endif
    }
}
スプリプトシンボルをプロジェクト全体に反映させる

 "Edit" > "Project Settings" > "Player" を選択します。"Player Settings" ウィンドウが表示されたら、"Scripting Define Symbols" フィールドにスクリプトシンボルを追加することでプロジェクト全体で定義できます。

 複数のスクリプトシンボルを定義するには、セミコロンで区切る必要があります。2021.3 バージョンでは、セミコロンで区切らずに入力できるようになりました。Copy Defines ボタンは、使用中のカスタムスクリプトシンボル群を、セミコロンで区切られた値の文字列としてリストからクリップボードにコピーします。