はじめに
Unityでプログラムを記述していると、Unityのバージョンで処理を分岐したいということが良くあります。 そんな時、 #define ディレクティブを使用して処理を分岐さっせてきましたが、実はUnity2019からはAssembly DefinitionにUnity Editor本体や利用しているパッケージのバージョンに応じて自身で定数を定義出来る機能が追加されていますので今回はその紹介とやり方になります。
Assembly Definitionの生成方法
Assets > Create > Assembly DefinitionでAssembly Definationを作成します。
Assembly DefinitionへのVersion Defineの設定方法
Assembly DefinitionをInspectorで表示し、右下にある+ボタンを押します。
このような表示に切り替わります、リソースのプルダウンメニューを選択すると指定項目が表示されます。
各項目の概要は下記の通りです。
項目 | 説明 |
---|---|
Resource | Defineを設定したいUnityやパッケージを指定します |
Define | 定義したいDefineを指定します。 |
Expression | Defineが有効となるバージョンの範囲をNuGetと同じ表記方法で指定します |
Expression outcome | Expressionで設定した結果を表示します |
NuGetのバージョン指定方法
数値
,(
,)
,[
,]
,,
の組み合わせで範囲を指定します。
以下に組み合わせのサンプルを示します。
Expression | Expression outocome | 説明 |
---|---|---|
1.0 | x >= 1.0 | 指定バージョン以上であれば |
(1.0,) | x > 1.0 | 指定バージョンより大であれば |
[1.0] | x == 1.0 | 指定バージョンと等しければ |
(,1.0] | x <= 1.0 | 指定バージョン以下であれば |
(,1.0) | x < 1.0 | 指定バージョン未満であれば |
[1.0,2.0] | 1.0 <= x <= 2.0 | 左辺以上且つ右辺以下であれば |
(1.0,2.0) | 1.0 < x < 2.0 | 左辺より大且つ右辺未満であれば |
[1.0,2.0) | 1.0 <= x < 2.0 | 左辺以上且つ右辺未満であれば |
(1.0,2.0] | 1.0 < x <= 2.0 | 左辺より大且つ右辺未満であれば |
※(1.0)
のような定義は使用出来ません。
バージョン番号は下記のように指定します。
メージャー番号
.マイナー番号
.パッチ番号
[サフィックス]
2019.4.28f1であれば
メジャー番号:2019
マイナー番号:4
パッチ番号:28
サフィックス:f1
となります。
サフィックスは省略可能ですが、マイナーとパッチに関しては省略すると0
として処理されることに注意してください。
組み合わせ例
本題のUnityバージョンの指定方法です。 概ね下記のパターンで乗り切れると思いますが、これ以外の範囲の指定が必要な場合は上記を参考にして下さい。
Unity2019系でのみ有効にしたい定数がある場合
Unity2019.4LTSでのみ有効にしたい定数がある場合
Unity2019.4.28からUnity2019.4.30迄有効にしたい定数がある場合
特定のバージョン間で不具合があって、その間ワークアラウンドで乗り切る時とかに使えそうですね。
Unity2019.4.28f1でのみ有効にしたい定数がある場合
最後に
#define ディレクティブ
による指定ではかなり大雑把のバージョン指定しか出来ませんでしたが、Assembly Definitionを使用すること本来やりたかったことがようやく出来るようになったというのが自分の心象です。
今更Unity2019の機能紹介も如何なものですが、知らずにUNITY_2017_1_OR_NEWER
等を未だに使い続けているプロジェクトもあると思いますので参考になれば幸いです。