VSでのネイティブプラグインのビルド
VSが使っているビルドツール MSBuildを使う。 VSのプロジェクトファイルにはMSBuildのXMLが含まれている。 これ自体はVSに依存していないため、単体で動かすこともできる。
パスが通ってなかったらパスを通す。管理者権限が必要。
> MSBuild
'MSBuild' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
> SETX /M PATH "%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin"
成功: 指定した値は保存されました。
別プロセスから適用されるので立ち上げ直すとパスが通っていることを確認できる。
> MSBuild /version
Microsoft (R) Build Engine バージョン 15.1.1012.6693
Copyright (C) Microsoft Corporation.All rights reserved.
15.1.1012.6693
ビルドして Assets\Plugins に配置する。これは前作ったBLEのネイティブプラグインのもの。
Unity/UWPでBLEを扱うプラグインを作る - sambaiz-net
> git clone [email protected]:sambaiz/UnityBLE_UWP.git
> cd UnityBLE_UWP
> MSBuild UnityBLE_UWP\UnityBLE_UWP.csproj /t:restore;build /p:Configuration=Release;Platform="x86"
> MSBuild UnityBLE_Editor\UnityBLE_Editor.csproj /t:restore;build /p:Configuration=Release
> copy /Y UnityBLE_UWP\bin\x86\Release\UnityBLE_UWP.dll ..\Assets\Plugins\WSA
> copy /Y UnityBLE_Editor\bin\Release\UnityBLE_Editor.dll ..\Assets\Plugins
> cd ..
> rmdir /S /Q UnityBLE_UWP
こんなエラーが出てきたらmscorlib.dllをインポートできていないのが原因のようで、 restoreしたらうまくいった。
error CS0518: 定義済みの型 'System.Object' は定義、またはインポートされていません
UnityでのWSAのビルド
同様にUnityもパスが通ってなかったら通す。
> Unity
'Unity' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
> SETX /M PATH "%PATH%;C:\Program Files\Unity\Editor"
成功: 指定した値は保存されました。
こんな スクリプト をAssets/Editorの中に置く。
using UnityEditor;
public class Build {
static void PerformBuild()
{
string[] scenes = { "Assets/main.unity" };
BuildPipeline.BuildPlayer(scenes, "build",
BuildTarget.WSAPlayer, BuildOptions.None);
}
}
このstaticメソッドをexecuteMethod で渡してビルドする。Unityを開いたままだと失敗するので閉じる必要がある。
この例だとbuildディレクトリに出力される。もし出力されなかったらEditorログを見る。
> Unity -quit -batchmode -executeMethod Build.PerformBuild
> type C:\Users\(username)\AppData\Local\Unity\Editor\Editor.log
まとめたもの
ということでこんなバッチをUnityプロジェクトの直下に置いておくことにした。
git clone [email protected]:sambaiz/UnityBLE_UWP.git
cd UnityBLE_UWP
MSBuild UnityBLE_UWP\UnityBLE_UWP.csproj /t:restore;build /p:Configuration=Release;Platform="x86"
MSBuild UnityBLE_Editor\UnityBLE_Editor.csproj /t:restore;build /p:Configuration=Release
copy /Y UnityBLE_UWP\bin\x86\Release\UnityBLE_UWP.dll ..\Assets\Plugins\WSA
copy /Y UnityBLE_Editor\bin\Release\UnityBLE_Editor.dll ..\Assets\Plugins
cd ..
rmdir /S /Q UnityBLE_UWP
rmdir /S /Q build
Unity -quit -batchmode -executeMethod Build.PerformBuild