概要
前回に引き続きコマンドラインからUnityのビルドするやーつです。
今回はもう少しステップアップして、こんなことも出来ますよっていうお話を綴ります。
ステップアップ編
* 引数を取得する
System.Environment.GetCommandLineArgs();
を使うとUnityに与えられた引数を取得できるよ!
サンプル
呼び出し側
build.bat
"C:\Program Files\Unity\Editor\Unity.exe" -batchmode -quit -logFile .\build.log -projectPath C:\project\myUnityProj -executeMethod BuildClass.Build /platform Android /name ichigo /partner seira
Unity側で読み取る用に、 /platform Android
/name ichigo
/partner seira
の3つを追記してみたよ。
Unity側
BuildClass.cs
BuildTarget platform = BuildTarget.StandaloneWindows;
// 引数取得
string[] args = System.Environment.GetCommandLineArgs();
int i, len = args.Length;
for( i = 0; i < len; ++i )
{
switch( args[i] )
{
case "/name":
Debug.Log( "Name : " + args[i+1] ); // "ichigo"
break;
case "/partner":
Debug.Log( "Partner : " + args[i+1] ); // "seira"
break;
case "/platform":
platform = (BuildTarget)System.Enum.Parse( typeof(BuildTarget), args[i+1] );
break;
}
}
読み取るコードはこんな感じ。
参考
* ビルド対象シーンを Scenes In Build
から自動で抽出する
サンプル
こんな感じの関数を追加したよ。
BuildClass.cs
System.Collections.Generic;
static string[] GetEnabledScenes()
{
List<string> sceneList = new List<string>();
// "Scenes In Build"に登録されているシーンリストを取得
EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
foreach( EditorBuildSettingsScene scene in scenes )
{
// チェックがついているか確認
if( scene.enabled )
{
// リストに加える
sceneList.Add( scene.path );
}
}
// 配列にして返す
return sceneList.ToArray();
}
BuildPipeline.BuildPlayer
の第一引数をこの関数に置き換えてね!
BuildClass.cs
// 実行
string errorMessage = BuildPipeline.BuildPlayer(
GetEnabledScenes(), //!< ビルド対象シーンリスト
"C:/project/bin/myUnityProj.exe", //!< 出力先
BuildTarget.StandaloneWindows, //!< ビルド対象プラットフォーム
BuildOptions.Development //!< ビルドオプション
);
* ビルド後にプラットフォーム設定を元に戻す
BuildPipeline.BuildPlayer
を実行すると、次回起動時も対象プラットフォームの指定が切り替わったままになっちゃうけど、
それを元に戻すための施策を紹介するよ。
サンプル
BuildClass.cs
// 現在の設定を控える
BuildTarget prevPlatform = EditorUserBuildSettings.activeBuildTarget;
// 実行
string errorMessage = BuildPipeline.BuildPlayer(
GetEnabledScenes(), //!< ビルド対象シーンリスト
"C:/project/bin/myUnityProj.exe", //!< 出力先
platform, //!< ビルド対象プラットフォーム
BuildOptions.Development //!< ビルドオプション
);
// 元に戻す
EditorUserBuildSettings.SwitchActiveBuildTarget( prevPlatform );
ベタだけどこんな感じで実現できるよ!
参考
- Unity - Scripting API: EditorUserBuildSettings.activeBuildTarget
- Unity - Scripting API: EditorUserBuildSettings.SwitchActiveBuildTarget
* プラットフォーム毎の設定を変更する
PlayerSettings
プラットフォームに関する設定等には PlayerSettings
を使うよ。
項目が多いので比較的使用頻度が高そうなものをピックアップするよ!
プロパティ | 説明 |
---|---|
productName | アプリ名だよ。 スマホの場合はアイコンと一緒に表示される名前になるよ。 |
bundleVersion | アプリのバージョンだよ。 例 : 1.0.6.192 |
shortBundleVersion | アプリバージョンの簡易表示だよ。 例 : 1.0 |
bundleIdentifier | iOSの場合はBundle Identifier、 Androidの場合はパッケージ名にあたるよ。 |
Android.keystoreName | 使用するキーストアファイル名を指定できるよ。 |
Android.keystorePass | ↑のパスワードを指定できるよ。 |
Android.keyaliasName | 使用するキーエイリアス名を指定できるよ。 |
Android.keyaliasPass | ↑のパスワードを指定できるよ。 |
Android.useAPKExpansionFiles | 実行バイナリを分割し.apkと.obbを生成するようにするかを指定できるよ。 |
Android.bundleVersionCode | DeveloperConsoleで必要なバージョンコードを指定できるよ。 |
iOS.targetDevice | 対応するiOSデバイスを指定できるよ。 |
サンプル
BuildClass.cs
// 設定
PlayerSettings.productName = "カツアイ!";
PlayerSettings.bundleVersion = "2.1.0.18";
PlayerSettings.shortBundleVersion = "2.1";
PlayerSettings.bundleIdentifier = "com.starlight.katsuai";
// 実行
string errorMessage = BuildPipeline.BuildPlayer( /* 以下略 */
参考
- Unity - スクリプトリファレンス: PlayerSettings
- Unity - マニュアル: Standalone Player Settings
- Unity - マニュアル: Android Player Settings
- Unity - マニュアル: iOS Player Settings
- Unity - マニュアル: Webplayer Player Settings