unityでいってみよう!

unityがチョットワカル位の人のブログ

Assembly Definitionを利用してUnityのバージョンを判定してみよう!

はじめに

Unityでプログラムを記述していると、Unityのバージョンで処理を分岐したいということが良くあります。 そんな時、 #define ディレクティブを使用して処理を分岐さっせてきましたが、実はUnity2019からはAssembly DefinitionにUnity Editor本体や利用しているパッケージのバージョンに応じて自身で定数を定義出来る機能が追加されていますので今回はその紹介とやり方になります。

Assembly Definitionの生成方法

Assets > Create > Assembly DefinitionでAssembly Definationを作成します。

f:id:kimukats:20210915092249p:plain

Assembly DefinitionへのVersion Defineの設定方法

Assembly DefinitionをInspectorで表示し、右下にある+ボタンを押します。

f:id:kimukats:20210915092626p:plain

このような表示に切り替わります、リソースのプルダウンメニューを選択すると指定項目が表示されます。 f:id:kimukats:20210915092833p:plain

各項目の概要は下記の通りです。

項目 説明
Resource Defineを設定したいUnityやパッケージを指定します
Define 定義したいDefineを指定します。
Expression Defineが有効となるバージョンの範囲をNuGetと同じ表記方法で指定します
Expression outcome Expressionで設定した結果を表示します

NuGetのバージョン指定方法

docs.microsoft.com

数値,(,),[,],,の組み合わせで範囲を指定します。 以下に組み合わせのサンプルを示します。

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系でのみ有効にしたい定数がある場合

f:id:kimukats:20210915102025p:plain

Unity2019.4LTSでのみ有効にしたい定数がある場合

f:id:kimukats:20210915102236p:plain

Unity2019.4.28からUnity2019.4.30迄有効にしたい定数がある場合

f:id:kimukats:20210915102908p:plain

特定のバージョン間で不具合があって、その間ワークアラウンドで乗り切る時とかに使えそうですね。

Unity2019.4.28f1でのみ有効にしたい定数がある場合

f:id:kimukats:20210915101707p:plain

最後に

#define ディレクティブによる指定ではかなり大雑把のバージョン指定しか出来ませんでしたが、Assembly Definitionを使用すること本来やりたかったことがようやく出来るようになったというのが自分の心象です。 今更Unity2019の機能紹介も如何なものですが、知らずにUNITY_2017_1_OR_NEWER等を未だに使い続けているプロジェクトもあると思いますので参考になれば幸いです。