LoginSignup
46
43

More than 5 years have passed since last update.

コマンドラインからUnityのビルドを走らせる。 -ステップアップ編-

Last updated at Posted at 2015-11-20

概要

前回に引き続きコマンドラインから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 から自動で抽出する

Scenes In Build ってコレのこと!
ss_111.png

サンプル

こんな感じの関数を追加したよ。

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 );

ベタだけどこんな感じで実現できるよ!

参考


* プラットフォーム毎の設定を変更する

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( /* 以下略 */


参考


シリーズ

46
43
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
43