Unity Tools for Azure DevOps の使い方

# はじめに

Unity Tools for Azure DevOps とは Azure DevOps の Pipelines で利用可能な Unity のビルドタスクです。

ただ、注意点としては、まだ結構内容に変更が多いです。
執筆時点でのバージョンは V3 ですが、V3 と言いながら違う動作をする V3 がデプロイされています。
また、Github で公開されているソースコードと実際にタスクを利用した時の挙動が違います。
この記事は Github も参照してますが、実際に Pipelines で実行してみた結果を記載しております。
とはいえ、この投稿以降でも更新されている可能性はありますのでご注意を…。

Azure DevOps Marketplace:
https://marketplace.visualstudio.com/items?itemName=DinomiteStudios.64e90d50-a9c0-11e8-a356-d3eab7857116
Github:
https://github.com/Dinomite-Studios/unity-azure-pipelines-tasks

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19224/be80c027-1690-e2f3-57d3-6c5098971218.png)

## タスク一覧

Unity Tools for Azure DevOps には以下のタスクが実装されています。

- UnityGetProjectVersion
- UnityActivateLicense
- UnityBuild
- UnityCMD
- UnityTest

### UnityGetProjectVersion

このタスクの利用目的はプロジェクトで利用している Unity のバージョンと同じバージョンをインストールするためです。

これは指定された Unity プロジェクトで利用している Unity のバージョンを ProjectVersion.txt から読み込んで返します。
成功すると projectVersion にバージョン番号が設定されます。

|引数|省略|説明|
|:--|:--:|:--|
|projectPath|○|Unity プロジェクトへのパス|

Unity プロジェクトがリポジトリ直下にある場合は projectPath には $(Build.SourcesDirectory) を渡しておけば問題ないです。

|戻値|説明|
|:--|:--|
|projectVersion|Unity のバージョン番号|

Unity プロジェクトに設定されているバージョン番号が返ります。

```yml
- task: UnityGetProjectVersionTask@1
  name: UnityGetProjectVersion
  displayName: 'Getting a version of Unity'
  inputs:
    unityProjectPath: '$(Unity.ProjectPath)'
```

### UnityActiveteLicense

このタスクの利用目的は Unity のライセンスをアクティベートするためです。
また、ポスト処理が入っており、ジョブ終了時にそのライセンスをリリースも実行してくれます。

Microsoft-hosted で実行する場合、毎度新規で Unity をインストールしますし、ライセンスが毎度がリリースされますので、この処理が必要になります。

|引数|省略|説明|
|:--|:--:|:--|
|username|×|ユーザー名|
|password|×|パスワード|
|serial|×|シリアル番号|
|unityEditorsPathMode|○|Unity エディタのインストールディレクトリモードを選択。省略された場合は unityHub が設定される。<br><br>unityHub（デフォルト）：Unity Hub のデフォルトのパスを利用<br><br>environmentVariable：環境変数 $UNITYHUB_EDITORS_FOLDER_LOCATION に指定されたパスを利用 <br><br>specify：customUnityEditorsPath に指定されたパスを利用|
|customUnityEditorsPath|○|Unity エディタへのパスを絶対パスで指定。unityEditorsPathMode に specify が指定された場合に有効。省略した場合はカレントディレクトリが使用される。|
|unityProjectPath|○|Unity のプロジェクトが配置されているパス。省略された場合はカレントディレクトリが設定される。|

|戻値|説明|
|:--|:--|
|logsOutputPath|ログファイルパス|

```yml
- task: UnityActivateLicenseTask@1
  displayName: 'Unity License Activations.'
  condition: succeeded()
  inputs:
    username: $(Unity.UserName)
    password: $(Unity.Password)
    serial: $(Unity.SerialKey)
    unityEditorsPathMode: 'unityHub'
    unityProjectPath: '$(Unity.ProjectPath)'
```

### UnityBuild

このタスクは Unity プロジェクトをビルドするために利用します。

Unity を利用した場合に、バッチビルドで様々な処理をさせずに単にビルドしたいというだけであれば、バッチファイルも自動生成してくれますので非常に便利に使えます。

|引数|省略|説明|
|:--|:--:|:--|
|additionalCmdArgs|○|追加でコマンドラインに渡したい引数がある場合に、この引数で指定する。自前のバッチビルドファイルを指定する時に -quit とかに利用できる。|
|buildScriptType|○|ビルドに利用するスクリプトの指定。<br><br>default：ビルドスクリプトは自動生成されたものを利用する。<br><br>inline：inlineBulidScript に記述されたスクリプトを利用する。<br><br>existing（デフォルト）：<br>|
|inlineBuildScript|○|buildScriptType に 'inline' が指定された場合に executeMethod で実行されるスクリプトを指定する。|
|buildTarget|×|ビルドするターゲット名を指定する。指定方法は『[Unity のコマンドライン](https://docs.unity3d.com/Manual/CommandLineArguments.html)』の『-buildTarget』を参照。|
|unityEditorsPathMode|○|UnityActiveteLicense と同じ。|
|customUnityEditorsPath|○|UnityActiveteLicense と同じ。|
|unityProjectPath|○|UnityActiveteLicense と同じ。|
|outputFileName|○|出力するファイル名。省略された場合は 'drop' という名前に設定される。|
|outputPath|○|出力するディレクトリパス。省略された場合はカレントディレクトリが設定される。|

|戻値|説明|
|:--|:--|
|logsOutputPath|UnityActiveteLicense と同じ。|

```yml
- task: UnityBuildTask@3
  displayName: 'Building.'
  condition: succeeded()
  inputs:
    unityEditorsPathMode: 'unityHub'
    buildTarget: '$(Unity.TargetBuild)'
    unityProjectPath: '$(Unity.ProjectPath)'
    outputPath: '$(Build.BinariesDirectory)'
    outputFileName: 'Build'
```

### UnityCMD

このタスクは、ビルドまで大層な事をしたいわけではなく、バッチ処理をしたいというときには手軽に使えるタスクです。
UnityBuild の細かい設定を全部自前でやるというだけのタスクです。

|引数|省略|説明|
|:--|:--:|:--|
|cmdArgs|○|追加でコマンドラインに渡したい引数がある場合に、この引数で指定する。自前のバッチビルドファイルを指定する時に -quit とかに利用できる。|
|buildTarget|×|UnityBuild と同じ。|
|unityEditorsPathMode|○|UnityActiveteLicense と同じ。|
|customUnityEditorsPath|○|UnityActiveteLicense と同じ。|
|unityProjectPath|○|UnityActiveteLicense と同じ。|

### UnityTest

(省略)

# おわりに

正直言って、結構ソースコードの内容を読まないとまともにパラメータの指定方法も分からなかったりで苦労しましたが、Unity と Pipelines で利用するには重宝するタスクに違いありません。

どちらにせよ、直接 YAML を編集する上ではこの辺りのタスクは覚えておいて損はしませんので！