記事にしたいテーマはいくつかあったので、題材を探していたのですがまたしても目に止まったのはかずきさんのブログ。しかも割と最近の記事。
いつも大変お世話になっております。
今回のネタは、やりたいことは記事と同じ「 HoloLens で NuGet のライブラリ使いたい」なんですが、
ちょっと前から手元で導入している方法があったので別の方法として紹介しようと思います。
こんな手もあるよ、くらいの感じで参考にしていただけると。
この記事で紹介する方法
インストールコマンドをまとめた ps1 ファイルを Unity プロジェクトフォルダの直下などに用意しておき、Unity のビルド時にソリューションが生成されるフォルダにコピー、初めて生成した時は手動で ps1 をパッケージマネージャコンソールで実行するという方法になります。
* 2回目以降上書きでビルドする場合は不要
目次
- この記事で紹介する方法
- NuGet で追加するライブラリ
- ReactiveProperty を使ったプログラム
- ps1 ファイルにコマンドをしたためる
- Unity のビルドで下準備
- 生成されたソリューション
- まとめ
NuGet で追加するライブラリ
参照記事と同じ Json.NET を利用しようと思ったのですが、Unity が出力するプロジェクトの参照をよく見るとすでにライブラリが...。
同じライブラリを追加しても仕方がないので、筆者に敬意を表して ReactiveProperty を追加しましょう。
ただこちらも Json.NET 同様かなり古いバージョンじゃないとインストールに失敗しました。
成功したのは「2.9.0」。一方、最新バージョンは「4.2.2」...。
バージョンの依存関係がかなりシビアになってる様子。
ReactiveProperty を使ったプログラム
以下のコードを Unity 上で追加します。
Editor 上では利用できない ReactiveProperty を使ったコードが書かれています。
#if ディレクティブによる回避などは記事同様ですね。
#if UNITY_UWP using Reactive.Bindings; #endif using UnityEngine; public class SampleBehaviourScript : MonoBehaviour { #if UNITY_UWP public ReactiveProperty<string> Name { get; } = new ReactiveProperty<string>(); #endif void Start() { } void Update() { } }
ps1 ファイルにコマンドをしたためる
予め追加するライブラリのインストールコマンドをしたためた ps1 ファイルを用意します。
Install-Package ReactiveProperty -Version 2.9.0 -Project Assembly-CSharp Install-Package ReactiveProperty -Version 2.9.0 -Project UsingUwpLibrary
今回は Unity プロジェクト直下に、"install-package.ps1" という名前で作成しました。
Unity のビルドで下準備
PostProcessBuildAttribute を使って、ソリューションの出力先に先程の ps1 ファイルをコピーするようにします。
このようなコードを、 Editor フォルダの下に入れることで Unity がよしなに実行してくれます。
using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEngine; public class AddPackageBuildPostprocessor { [PostProcessBuild] public static void OnPostProcessBuild(BuildTarget target, string pathToBuildProject) { if (File.Exists("./install-package.ps1")) { File.Copy("./install-package.ps1", "./App/install-package.ps1", true); } } }
生成されたソリューション
生まれたばかりはこんな感じ。このままビルドするとエラーになります。
パッケージマネージャコンソールが開いてない場合は開きます。
コピーされている install-package.ps1 を実行します。
(別にあれこれやってコピーしなくても「..\」一つ書き足すだけでも動くんですががが。)
PM> .\install-package.ps1
実行結果はこちらになります。
参照に必要なライブラリが追加されていますのでビルドが通るようになりました。
Unity から初めてソリューションを生成した場合に1回実行すれば、次回以降上書きでビルドしている分にはライブラリを追加する作業は不要になります。
とは言え、たまにソリューションの調子が悪くなってフォルダ毎ゴミ箱に突っ込む事もあるので、その場合は再度 ps1 を実行してあげれば復元できます。
まとめ
今回は、HoloLens で NuGet の UWP 向けのライブラリを利用する方法を紹介しました。
簡単におさらいすると、 Install-Package のコマンドを用意しておき、Unity ビルド後に手動で実行するという方法でした。
PostProcessBuild と install-package.ps1 は、どのプロジェクトでも共通で使い回せるので、github などに最初から突っ込んで置くと便利です。
必要になったタイミングで install-package.ps1 に想いをしたためてあげると良いでしょう。