Version: 2017.2
ビルドプレイヤーパイプライン
アセットの内部処理

コマンドライン引数

通常、デスクトップのアイコンをダブルクリックして Unity を立ち上げますが、コマンドライン (macOS のターミナルや Windows のコマンドプロンプト) から実行することも可能です。コマンドラインから実行する場合、Unity はスタートアップ時にコマンドや情報を受け取る事ができるので、通しテストや自動ビルド、その他の開発タスクを行う時にとても便利です。

macOS で Unity を起動するには、以下をターミナルに入力します。

/Applications/Unity/Unity.app/Contents/MacOS/Unity

64-bit Windows で Unity を起動するには、以下をコマンドプロンプトに入力します。

C:\Program Files\Unity\Editor\Unity.exe

32-bit Windows で Unity を起動するには、以下をコマンドプロンプトに入力します。

C:\Program Files (x86)\Unity\Editor\Unity.exe

同様の方法で、スタンドアロンの Unity ゲームを起動します。

サイレントモードで Unity を起動

macOS で Unity をサイレントモードで起動するには、ターミナルに以下を入力します。

/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -serial SB-XXXX-XXXX-XXXX-XXXX-XXXX -username 'JoeBloggs@example.com' -password 'MyPassw0rd'

ノート: Jenkins のような継続的インテグレーション (CI) ツールを使って、コマンドラインを通してアクティベーションする場合、 WindowServer エラーを避けるために -nographics フラグを加えてください。

64-bit Windows で Unity をサイレントモードで起動するには、コマンドプロンプトに以下を入力します。

     "C:\Program Files\Unity\Editor\Unity.exe" -quit -batchmode -serial SB-XXXX-XXXX-XXXX-XXXX-XXXX -username "JoeBloggs@example.com" -password "MyPassw0rd"

32-bit Windows で Unity をサイレントモードで起動するには、コマンドプロンプトに以下を入力します。

 "C:\Program Files (x86)\Unity\Editor\Unity.exe" -quit -batchmode -serial SB-XXXX-XXXX-XXXX-XXXX-XXXX -username "JoeBloggs@example.com" -password "MyPassw0rd"

オプション

上で述べた通り、エディターやビルドされた Unity のゲームについてもスタートアップ時にコマンドライン引数付き実行することができます。このセクションでは、利用可能なオプションを説明します。

オプション 説明
-assetServerUpdate <IP[:port] projectName username password [r <revision>]> 強制的に IP:port で指定された アセットサーバー のプロジェクトの更新を行ないます。ポート情報は任意であり、ない場合は標準のポート (10733) を使用します。このコマンドは -projectPath 引数と組み合わせて正しいプロジェクトで作業していることを確認したうえで使用してください。もしプロジェクト名がない場合、Unity で最後に開かれたプロジェクトが使用されます。もし -projectPath にプロジェクトが存在しない場合、自動的に新しいプロジェクトが作成されます。
-batchmode バッチモードで Unity を実行。これは常に他のコマンドライン引数との組み合わせで使用すべきです。なぜなら、ポップアップウインドウが表示されないため自動で行われるからです。もし例外エラーがスクリプトコード実行時に発生するか、アセットサーバーの更新が失敗するか、またはその他の処理が失敗した場合、Unity は直ちに戻り値 1 で終了します。
バッチモードでは Unity は最小限のログ出力しかコンソールに送信しないことに注意してください。ただし ログファイル には完全なログ情報が含まれます。エディターがプロジェクトを開いているときに同じプロジェクトをバッチモードで開くことはサポートされていないことに注意してください。Unity のインスタンスは同時にひとつしか実行することが出来ません。
-buildLinux32Player <pathname> 32-bit スタンドアロン Linux player をビルドします (例えば、-buildLinux32Player path/to/your/build)。
-buildLinux64Player <pathname> 64-bit スタンドアロン Linux player をビルドします (例えば、-buildLinux64Player path/to/your/build)。
-buildLinuxUniversalPlayer <pathname> 32-bit および 64-bit を組み合わせた Linux player をビルドします (例えば -buildLinuxUniversalPlayer path/to/your/build)。
-buildOSXPlayer <pathname> 32-bit スタンドアロン Mac OS X player をビルドします (例えば、-buildOSXPlayer path/to/your/build.app)。
-buildOSX64Player <pathname> 64-bit スタンドアロン Mac OS X player をビルドします (例えば、-buildOSX64Player path/to/your/build.app)。
-buildOSXUniversalPlayer <pathname> 32-bit および 64-bit を組み合わせた Mac OS X player をビルドします (例えば、-buildOSXUniversalPlayer path/to/your/build.app)。
-buildTarget <name> Allows the selection of an active build target before a project is loaded. Possible options are:
standalone, Win, Win64, OSXIntel, OSXUniversal, OSXIntel64, Linux, Linux64, LinuxUniversal, iOS, Android, Web, WebStreamed, WebGL, XboxOne, PS4, PSP2, WindowsStoreApps, Tizen, Switch, WiiU, N3DS, tvOS, PSM, SamsungTV.
-buildWindowsPlayer <pathname> 32bit スタンドアロン Windows プレイヤーをビルドします (例えば、-buildWindowsPlayer path/to/your/build.exe )。
-buildWindows64Player <pathname> 64bit スタンドアロン Windows player をビルドします (例えば、-buildWindows64Player path/to/your/build.exe )。
-stackTraceLogType 詳細なデバッグ機能。 stackTraceLogging を使うと、詳細にログを記録するようにできます。すべての設定で、 NoneScript OnlyFull が選択可能です (例えば -stackTraceLogType Full)。
-createProject <pathname> 特定のパスに空のプロジェクトを作成
-editorTestsCategories エディターテストをカテゴリーでフィルタリングします。テストカテゴリーはカンマで区切ってください。
-editorTestsFilter エディターを名前でフィルタリングします。テスト名はカンマで区切ってください。
-editorTestsResultFile 結果ファイルが置かれるパス。パスがフォルダーの場合は、デフォルトファイル名が使用されます。指定されていない場合は、結果はプロジェクトの root フォルダーに置かれます。
-executeMethod <ClassName.MethodName> この static メソッドは Unity のスタート直後に実行されます。すなわちプロジェクトが開かれ、必要であれば、アセットサーバーの更新が行われた後です。これにより継続的インテグレーション、ユニットテストの実施、ビルド作成、データ準備等々が使用できるようになります。コマンドライン処理のエラー結果がほしい場合は、例外を投げて Unity を戻り値 1 で終了させるか、ゼロ以外の戻り値を返すコード EditorApplication.Exit をコールします。引数を渡したい場合は、コマンドラインに追加し System.Environment.GetCommandLineArgs を使用して関数から取得します。-executeMethod を使用する場合、呼び出すスクリプトのメソッドは Editor フォルダー内になければいけません。実行するメソッドは static である必要があります。
-exportPackage <exportAssetPath1 exportAssetPath2 ExportAssetPath3 exportFileName> 指定したパス(または複数の指定したパス)にエクスポート。 exportAssetPath は Unity プロジェクトからエクスポートするフォルダー(Unity プロジェクトのルートフォルダーに対する相対パス)であり、 exportFileName はパッケージの名前です。現在、このオプションはフォルダー全体の単位でしかエクスポート出来ません。通常このコマンドは -projectPath 引数を使って使用する必要があります。
-force-d3d9 (Windows only) レンダリングで Direct3D 9 を使用します。通常、グラフィックス API はプレイヤー設定での値に依存します(デフォルトは D3D11 です)。
-force-d3d11 (Windows のみ) レンダリングで Direct3D 11 を使用します。通常、グラフィックス API はプレイヤー設定での値に依存します (デフォルトは D3D11 です)。
-force-glcore レンダリングに OpenGL 3/4 コアプロファイルを使用します。エディターは、利用可能でベストな OpenGL バージョンと、OpenGL ドライバがアクセスできるすべての OpenGL 拡張の利用を試みます。そのプラットフォームがサポートされていない場合は、Direct3D を使用します。
-force-glcoreXY -force-glcore と同じですが、OpenGL のバージョンを指定することができます。XYに指定できる値は、「32、33、40、41、42、43、44、54」です。
-force-gles (Windows のみ) レンダリングで端末の OpenGL を使用します。エディターは、ベストな OpenGL ES バージョンと、OpenGL ドライバから利用可能なすべての OpenGL ES 拡張の利用を試みます。
-force-glesXY (Windows のみ) -force-gles と同じですが、OpenGL ES のコンテキストバージョンをリクエストすることができます。XYに指定できる値は、「30、31、32」です。
-force-clamped -force-glcoreXY と一緒に使用することにより、追加された OpenGL 拡張の確認を避けることができます。これにより、同じコードパスで複数のプラットフォーム間で実行できます。
-force-free Unity Pro ライセンスがインストールされていても、マシン上に無料 Unity ライセンスがあるかのようにエディターを動作させます。
-importPackage <pathname> 特定の パッケージ をインポートします。インポートダイアログは表示されません。
-logFile <pathname> エディターまたは Windows/Linux/OSX スタンドアロンのログファイルが書き込みされる場所を指定。
-nographics バッチモードを実行する時、グラフィックスデバイスの初期化を行わないようにします。このパラメーターによって、GPU のないマシンで自動化されたワークフローを実行出来るようになります(自動化されたワークフローは、ウインドウにフォーカスがあるときのみ機能し、そうでない場合はシミュレートされた入力コマンドは送信出来ません)。Enlighten は GPU アクセラレーション が必須なため、-nographics コマンドを使用した GI のベイクは行えません。
-password <password> 起動時に必要なユーザーパスワード。
-projectPath <pathname> 指定したパスのプロジェクトを開きます。
-quit コマンドの実行が終了した後に Unity エディターを終了します。これによりエラーメッセージが表示されなくなる場合があることに注意してください (ただし、エラーメッセージは Editor.log ファイルには保存されます)。
-returnlicense 現在有効なライセンスをライセンスサーバーに返します。Unity がライセンスサーバーと通信する必要があるため、ライセンスファイルが削除されるまで数秒かかります。
-runEditorTests プロジェクトのエディターテストを実行します。これには projectPath を必要とし、 batchmode 引数と一緒に実行するとより効果的です。終了するとエディターは自動的に閉じるので quit は必要ありません。
-serial <serial> 指定されたシリアルキーで Unity の認証を行います。これを Unity の自動アクティベーションとして使用する場合は、実行後 Unity を終了するために -batchmode と一緒に -quit 引数も渡すようにしてください。また、Unity がライセンスサーバーと通信する必要があるため、ライセンスファイルを作成するまでに数秒かかるかもしれません。この引数で Unity を実行する前に、ライセンスファイルのフォルダーが存在し、フォルダーに適切な許可があることを確認してください。アクティベーションに失敗した場合は Editor.log ファイルで情報を確認できます。
-silent-crashes クラッシュダイアログを表示しません。
-username <username> Unity エディターのアクティベーションのときに、ログインフォームにユーザー名を入力します。
-password <password> Unity エディターのアクティベーションを行ない、ログインするためのパスワードを入力します。
-disable-assembly-updater <assembly1 assembly2> Unity の自動アップデート時に無視するアセンブリ名をスペースで区切ったリストにし、パラメーターとして指定します。
スペースで区切ったアセンブリ名のリストはオプショナルです。例 1 のように、コマンドラインにアセンブリ名を渡さなければ、すべてのアセンブリが無視されます。

例 1
unity.exe -disable-assembly-updater

例 2 では 2 つのアセンブリ名が渡されています。そのうちの 1 つはパスが表示されています。例 2 では、A1.dll が、どのフォルダーに格納されている場合でも無視されます。また、A2.dll は、subfolder フォルダーに格納されている場合のみ、無視されます。

例 2
unity.exe -disable-assembly-updater A1.dll subfolder/A2.dll

あるアセンブリを -disable-assembly-updater コマンドラインのパラメーターとして渡すと (または、アセンブリを何も指定しない場合も)、Unity は以下のメッセージを Editor.log にログします。

[Assembly Updater] warning: Ignoring assembly [assembly_path] as requested by command line parameter.").

これを利用して、アセンブリをインポートするときの不要な API Updater のオーバーヘッドを避けます。

これは、Unity API にアクセスするアセンブリをインポートするときに、Unity API でアップデートする必要がないとわかっている場合に便利です。また、Unity API にまったくアクセスしないアセンブリをインポートする場合にも便利です (例えば、Unity の外部にあるゲームソースコードやその一部をビルドし、その結果のアセンブリを Unity プロジェクトにインポートする場合など)。

注意: アップデートが必要なアセンブリのアップデートを無効にすると、コンパイル時、実行時、または、その両方でエラーが発生する場合があり、追跡するのが困難です。
-accept-apiupdate Unity がバッチモードで起動されているときに APIUpdater の実行を指定するために、このコマンドラインオプションを使用します。

例:

unity.exe -accept-apiupdate -batchmode [other params]

Unity をバッチモードで起動するときにこのコマンドライン引数を省略すると、APIUpdater が実行されず、コンパイラーエラーが発生する原因になることがあります。2017.2 より前のバージョンでは、Unity をバッチモードで起動したときに APIUpdater の実行を避ける方法はありません。

C

using UnityEditor;
class MyEditorScript
{
     static void PerformBuild ()
     {
         string[] scenes = { "Assets/MyScene.unity" };
         BuildPipeline.BuildPlayer(scenes, ...);
     }
}

JavaScript

static void PerformBuild ()
{
    string[] scenes = { "Assets/MyScene.unity" };
    BuildPipeline.BuildPlayer(scenes, ...);
}

以下のコマンドは Unity をバッチモードで実行し、MyEditorScript.PerformBuild メソッドを実行し、その後、完了時に終了します。

Windows

C:\program files\Unity\Editor\Unity.exe -quit -batchmode -executeMethod MyEditorScript.PerformBuild

Mac OS

/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -executeMethod MyEditorScript.PerformBuild

Unity をバッチモードで実行します。与えられたプロジェクトパスを使用してアセットサーバーから更新します。メソッドは、アセットサーバーから全てのアセットのダウンロードとインポートが終了した後に実行されます。メソッド実行が完了した後、Unity を自動的に終了します。

/Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -projectPath ~/UnityProjects/AutobuildProject -assetServerUpdate 192.168.1.1 MyGame AutobuildUser l33tpa33 -executeMethod MyEditorScript.PerformBuild -quit

Unity エディターの特別なコマンドライン引数

これらの引数は、特殊な環境下またはサポート側より指示されたときのみ使用してください。

オプション 説明
-enableIncompatibleAssetDowngrade Unity のより新しい互換性がないバージョンで作成したアセットがあり、現在使用している Unity のバージョンに合わせてダウングレードしたい場合に使用します。これを有効にすると、ダウングレードを必要とするプロジェクトを開こうとするとき、ダウングレードの確認を求めるダイアログボックスを表示します。
注意 この手順はサポートされていないためリスクが高く、最後の手段としてのみ使ってください。

Unity スタンドアロンプレイヤーのコマンドライン引数

Unityでビルドしたスタンドアロンプレイヤーはコマンドライン引数を読み取ることができます。

オプション 説明
-adapter N (Windows のみ) 別のディスプレイでフルスクリーン実行することを許容し、ここで N はディスプレイ番号を指します。多くの場合アダプターとビデオカードは 1:1 の関係です。マルチヘッド対応のカードの場合(ひとつのカードから複数モニターを操作)、各々の “ヘッド” はアダプター自身の場合があります。
-batchmode ゲームを “headless” モードで実行します。ゲームは何も表示せず、ユーザー入力を受付ません。これはネットワークゲーム でのサーバー実行に最も便利です。
-force-d3d9 (Windows only) レンダリングで Direct3D 9 を使用します。通常、グラフィックス API はプレイヤー設定での値に依存します(デフォルトは D3D11 です)。
-force-d3d9-ref (Windows のみ) 強制的にDirect3Dの “Reference” ソフトウェアレンダラーで実行します。正しく動作するためには DirectX SDK がインストールされている必要があります。自動的なテストスイートで、グラフィックスカードにどれが使用されていてもレンダリングが同一であるようにする場合、たいてい役立ちます。
-force-d3d11 (Windows のみ) 強制的にレンダリングでDirect3D 11を使用します。
-force-d3d11-no-singlethreaded DirectX 11.0 を D3D11_CREATE_DEVICE_SINGLETHREADED フラグなしで作成するように強制します。
-force-glcore レンダリングに OpenGL コアプロファイルを使用するよう、エディターに強制します。 エディターは、もっとも適切な利用可能な OpenGL バージョン、および、OpenGL ドライバーによってアクセス可能なすべての OpenGL 拡張機能の使用を試みます。プラットフォームがサポートされていない場合、Direct3D が使用されます。
-force-glcoreXY -force-glcore と同じですが、OpenGL のバージョンを指定することができます。XYに指定できる値は、「32、33、40、41、42、43、44、54」です。
-force-clamped -force-glcoreXY と一緒に使用することにより、追加された OpenGL 拡張をチェックするのを避け、同じコードパスのプラットフォーム間で実行可能になります。
-nographics バッチモードで実行している場合、すべてのグラフィックデバイスの初期化を行いません。これによってGPUを持っていないマシンで自動化されたワークフローを実行することが可能になります。
-nolog (Linux と Windows のみ) ログを出力しません。通常は、output_log.txt はゲームの実行ファイルの隣の *_Data フォルダーに書き込まれ、Debug.Log 出力が表示されます。
-popupwindow ウィンドウは、フレームなしのポップアップウィンドウとして作成されます。
-screen-fullscreen デフォルトのフルスクリーン状態をオーバーライドします。値は 0 か 1 のいずれかです。
-screen-height デフォルトの画面の高さをオーバーライドします。サポートされている解像度の整数である必要があります。
-screen-width デフォルトの画面の幅をオーバーライドします。サポートされている解像度の整数である必要があります。
-screen-quality デフォルトの画面の品質をオーバーライドします。使用例としては: /path/to/myGame -screen-quality Beautiful
-show-screen-selector 強制的に画面選択のダイアログボックスを表示させます。
-single-instance (Linux と Windows のみ) 同時に実行できるゲームのインスタンスを 1 つのみにします。他のインスタンスがすでに実行されている場合に、 -single-instance を使用して再度起動すると、既存のものにフォーカスします。
-parentHWND <HWND> delayed (Windows のみ) Windows スタンドアロンアプリケーションを別のアプリケーションに埋め込みます。これを使用する場合は、親アプリケーションのウィンドウハンドル (HWND) を Windows スタンドアロンアプリケーションに渡す必要があります。

-parentHWND &lt;HWND&gt; delayed を渡すと、Unity アプリケーションは実行中に非表示になります。また、アプリケーション内の Unity のために [Microsoft Developer ライブラリ] (https://msdn.microsoft.com/en-us/library/windows/) から [SetParent](https://msdn.microsoft.com/ja-jp/library/cc411061.aspx) を呼び出す必要があります。Microsoft の SetParent は、Unity のウィンドウを埋め込みます。Unity のプロセスを作成するとき、Unity のウィンドウは Microsoft の [STARTUPINFO](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx) 構造の一部として与えられる位置とサイズに従って作られます。<br/><br/> Unity ウィンドウのサイズを変更するには、Microsoft のGetWindowLongPtr` 関数のGWLP_USERDATA を確認します。グラフィックスが初期化されサイズ変更が安全になると、その最低ビット数は 1 に設定されます。Unity スプラッシュ画面の表示が終了すると、2 番目に低いビット数が 1 に設定されます。
詳細は、 EmbeddedWindow.zip の例を参照してください。

ユニバーサル Windows プラットフォーム コマンドライン引数

ユニバーサル Windows アプリは、デフォルトではコマンドライン引数を受け付けません。そのため、引数を渡すには、MainPage.xaml.cs/cppMainPage.cs/cpp から、例えば以下のような特別な関数を呼び出す必要があります。

appCallbacks.AddCommandLineArg("-nolog");

この関数を appCallbacks.Initialize() 関数の前に呼び出します。

オプション 説明
-nolog UnityPlayer.log を生成しません。
-force-driver-type-warp DirectX 11.0 WARP を強制します (詳細については Microsoft の文書 Windows Advanced Rasterization Platform を参照してください)。
-force-d3d11-no-singlethreaded DirectX 11.0 を D3D11_CREATE_DEVICE_SINGLETHREADED フラグなしで作成するように強制します。
-force-gfx-direct シングルスレッドレンダリングを強制します。
-force-feature-level–9–3 DirectX 11.0 機能レベル 9.3 を強制します。
-force-feature-level–10–0 DirectX 11.0 機能レベル 10.0 を強制します。
-force-feature-level–10–1 DirectX 11.0 機能レベル 10.1 を強制します。
-force-feature-level–11–0 DirectX 11.0 機能レベル 11.0 を強制します。

  • 2017–08–07 限られた 編集レビュー で修正されたページ
  • “accept-apiupdate” コマンドラインオプションは Unity 2017.2 で追加NewIn20172
ビルドプレイヤーパイプライン
アセットの内部処理