はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】asmdefのVersion Definesを利用して特定のパッケージ(の特定バージョン)がある場合にのみシンボル定義を行う

はじめに

今回はasmdefVersion Definesについて取り上げたいと思います。

Version Defines

docs.unity3d.com

概要

Version Definesを用いることで特定のパッケージ(かつ特定バージョン)がある場合にのみシンボル定義を行うことができます。

If you need to compile different code in an assembly according to whether a project uses specific versions of Unity or of a package, you can add entries to the Version Defines list. This list specifies rules for when a symbol should be defined. For version numbers, you can specify a logical expression that evaluates to a specific version or a range of versions.

プロジェクトがUnityやパッケージの特定のバージョンを使用しているかどうかによって、アセンブリ内の異なるコードをコンパイルする必要がある場合、「バージョン定義」リストにエントリを追加することができます。このリストでは、シンボルを定義する際のルールを指定します。バージョン番号には、特定のバージョンまたはバージョンの範囲に評価される論理式を指定できます。

アセンブリの定義 - Unity マニュアル

プロパティ 説明
Resource パッケージまたはモジュール
Define 適用可能なバージョンのリソースが、この Unity プロジェクトにも存在する場合に定義するシンボルです。
Expression バージョンまたはバージョンの範囲を定義する式。バージョン定義式 を参照してください。
Expression outcome 論理的なステートメントとして評価された式で、“x” は確認されたバージョンです。式の結果が Invalid の場合は、式が不正です。

Assembly Definition のプロパティ - Unity マニュアル

公式ドキュメントにはこのように書かれていますが、もっと口語的?に書いてみると以下の通り。

プロパティ 説明
Resource "指定したパッケージまたはモジュール"が存在する場合にDefineに記述したシンボル定義をする。
Define ResourceExpressionを満たす場合にアセンブリ内に適応されるシンボル定義を行う。
Expression 適応するバージョンまたはバージョンの範囲。
Expression outcome Expressionの結果を表示。
Version Defines
// サンプル
public class Sample : MonoBehaviour
{
    private void Start()
    {
#if ENABLE_UNITASK
        Debug.Log("UniTaskが入っています。");  
#else
        Debug.Log("UniTaskが入っていません。");
#endif   
    }
}

バージョン指定の式の書き方

アセンブリの定義 - Unity マニュアル

以上

2.3.3のようにバージョンを書きます。

以上
以上・以下

[1.0.0,2.3.3]のように[(以上)と](以下)を使います。

以上・以下
より大きい・より小さい

(1.0.0,2.3.3)のように((より大きい)と)(より小さい)を使います。

より大きい・より小さい
等しい

[2.3.3]のように書くと、等しいを表現できます。

等しい