Compiling from command line

Hello!
I am trying to set up some automated builds for my project using the command line, but Unity doesn’t seem to want to do anything in batch mode for me.

I have tried many combinations of commands but according to the log the editor just open refreshes the assets if needed and shut down, completely ignoring the -executeMethod parameter. And this is on an empty project with just the build script and an empty scene.

Also worth noting that it exits and runs in the background rather than waiting for it to finish.

I’m running the following command:

Unity.exe -quit -batchmode -projectPath "%cd%" -executeMethod "Builder.BuildAll"  -logfile "editor.log"

This is my build script:
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Builder : MonoBehaviour {

    public static void BuildAll()
    {
        BuildPipeline.BuildPlayer(
            new[] {"Test.unity"}, 
            "Build/Win/", 
            BuildTarget.StandaloneWindows64,
            BuildOptions.None);
    }
}

And here is the log file

LICENSE SYSTEM [2018827 10:58:55] Next license update check is after 2018-08-25T08:08:27

Built from '2017.3/release' branch; Version is '2017.3.1f1 (fc1d3344e6ea) revision 16522547'; Using compiler version '160040219'
OS: 'Windows 10  (10.0.0) 64bit' Language: 'en' Physical Memory: 16269 MB
BatchMode: 1, IsHumanControllingUs: 0, StartBugReporterOnCrash: 0, Is64bit: 1, IsPro: 1
[Package Manager] Server::Start -- Port 58090 was selected

 COMMAND LINE ARGUMENTS:
Unity.exe
-quit
-batchmode
-projectPath
D:\Projects\CI Test
-executeMethod
Builder.BuildAll
-accept-apiupdate
-logfile
editor.log
Successfully changed project path to: D:\Projects\CI Test
D:/Projects/CI Test
Loading GUID <-> Path mappings...0.000436 seconds
Loading Asset Database...0.005115 seconds
Audio: FMOD Profiler initialized on port 54900
AssetDatabase consistency checks...0.020913 seconds
Refreshing native plugins compatible for Editor in 5.85 ms, found 0 plugins.
Preloading 0 native plugins for Editor in 0.00 ms.
DisplayProgressbar: Unity Package Manager
[Package Manager] Resolving 4 packages:
[Package Manager]  * Package :  com.unity.ads@2.0.3
    (location: C:\Users\rasmus\AppData\LocalLow\Unity\cache\packages\packages.unity.com\com.unity.ads@2.0.3)
[Package Manager]  * Package :  com.unity.analytics@2.0.13
    (location: C:\Users\rasmus\AppData\LocalLow\Unity\cache\packages\packages.unity.com\com.unity.analytics@2.0.13)
[Package Manager]  * Package :  com.unity.purchasing@0.0.19
    (location: C:\Users\rasmus\AppData\LocalLow\Unity\cache\packages\packages.unity.com\com.unity.purchasing@0.0.19)
[Package Manager]  * Package :  com.unity.standardevents@1.0.10
    (location: C:\Users\rasmus\AppData\LocalLow\Unity\cache\packages\packages.unity.com\com.unity.standardevents@1.0.10)
[Package Manager] Resolve completed
Initialize engine version: 2017.3.1f1 (fc1d3344e6ea)
GfxDevice: creating device client; threaded=0
Direct3D:
    Version:  Direct3D 11.0 [level 11.1]
    Renderer: NVIDIA GeForce GTX 1060 (ID=0x1c20)
    Vendor:   NVIDIA
    VRAM:     2981 MB
    Driver:   22.21.13.8554
Initialize mono
Mono path[0] = 'D:/Unity/2017.3.1f1/Editor/Data/Managed'
Mono path[1] = 'D:/Unity/2017.3.1f1/Editor/Data/Mono/lib/mono/2.0'
Mono config path = 'D:/Unity/2017.3.1f1/Editor/Data/Mono/etc'
Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,defer=y,address=0.0.0.0:56916
Begin MonoManager ReloadAssembly
Refreshing native plugins compatible for Editor in 0.40 ms, found 4 plugins.
Initializing Unity.PackageManager (PackageManager) v2017.3.1 for Unity v2017.3.1f1
Registering precompiled unity dll's ...
Register platform support module: D:\Unity\2017.3.1f1\Editor\Data\PlaybackEngines\AndroidPlayer/UnityEditor.Android.Extensions.dll
Register platform support module: D:\Unity\2017.3.1f1\Editor\Data\PlaybackEngines\windowsstandalonesupport/UnityEditor.WindowsStandalone.Extensions.dll
Registered in 0.001451 seconds.
Refreshing native plugins compatible for Editor in 0.52 ms, found 4 plugins.
Preloading 2 native plugins for Editor in 1.50 ms.
Mono: successfully reloaded assembly
- Completed reload, in  0.783 seconds
Registering platform support modules:
Registered platform support modules in: 0.0926783s.
Native extension for WindowsStandalone target not found
Native extension for Android target not found
Begin MonoManager ReloadAssembly
Registering precompiled user dll's ...
Registered in 0.013650 seconds.
Refreshing native plugins compatible for Editor in 0.42 ms, found 4 plugins.
Preloading 2 native plugins for Editor in 0.11 ms.
Mono: successfully reloaded assembly
- Completed reload, in  0.904 seconds
Initializing Unity.PackageManager (PackageManager) v2017.3.1 for Unity v2017.3.1f1
Registering platform support modules:
Registered platform support modules in: 0.0711601s.
Native extension for WindowsStandalone target not found
Native extension for Android target not found
Validating Project structure ... 0.000232 seconds.
Refresh: detecting if any assets need to be imported or removed ... Refresh: elapses 0.002218 seconds (Nothing changed)
Warming cache for 134 main assets: 0.000240 seconds elapsed
Initializing Unity extensions:
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Editor/UnityEditor.HoloLens.dll'  GUID: 12fd8a0055b84bb59e84c9835a37e333
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/Timeline/Runtime/UnityEngine.Timeline.dll'  GUID: 6a10b2909283487f913b00d94cd3faf5
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/portable/nunit.framework.dll'  GUID: 405b9b51bb344a128608d968297df79c
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/GUISystem/Standalone/UnityEngine.UI.dll'  GUID: f70555f144d8491a825f0804e09c671c
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll'  GUID: f5f67c52d1564df4a8936ccd202a3bd8
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll'  GUID: 844f815391db42d49455cbf1a7bfc434
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/Networking/Standalone/UnityEngine.Networking.dll'  GUID: dc443db3e92b4983b9738c1131f555cb
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Runtime/UnityEngine.SpatialTracking.dll'  GUID: ed7343f30e3843b3afda8f8b02669cea
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Editor/UnityEditor.GoogleAudioSpatializer.dll'  GUID: 4a3ecb1425d14502837abea459cf2b70
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll'  GUID: 5f32cd94baa94578a686d4b9d6b660f7
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Runtime/UnityEngine.HoloLens.dll'  GUID: f7b54ff4a43d4fcf81b4538b678e0bcc
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Editor/UnityEditor.SpatialTracking.dll'  GUID: b5da970776034f77a070d99423d68791
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll'  GUID: adebbd281f1a4ef3a30be7f21937e02f
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll'  GUID: 870353891bb340e2b2a9c8707e7419ba
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll'  GUID: 53ebcfaa2e1e4e2dbc85882cd5a73fa1
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll'  GUID: ead147da21254ff9a0a936bdd75e1680
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Runtime/UnityEngine.GoogleAudioSpatializer.dll'  GUID: e4f4cf1b9b434137a499903a7a1d651a
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll'  GUID: 4ba2329b63d54f0187bcaa12486b1b0f
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll'  GUID: 1c6d1fbb51834b64847b1b73a75bfc77
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll'  GUID: 3a84de5cd0624681b6b6dcd8921d912a
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll'  GUID: 80a3616ca19596e4da0f10f14d241e9f
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UIAutomation/UnityEngine.UIAutomation.dll'  GUID: c768acbc9cf24d398488bb4c93b91288
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/Editor/UnityEditor.TestRunner.dll'  GUID: 4113173d5e95493ab8765d7b08371de4
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll'  GUID: 4b3fa4bde7f1451a8218c03ee6a8ded8
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/UIAutomation/Editor/UnityEditor.UIAutomation.dll'  GUID: b8a0574e92bd43a59e19d6c3c6ae54c7
 'D:/Unity/2017.3.1f1/Editor/Data/UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll'  GUID: 7668179ede524d6396c8b7d84461ea29
Unloading 103 Unused Serialized files (Serialized files now loaded: 0)
System memory in use before: 28.4 MB.
System memory in use after: 28.3 MB.

Unloading 76 unused Assets to reduce memory usage. Loaded Objects now: 665.
Total: 1.868940 ms (FindLiveObjects: 0.858436 ms CreateObjectMapping: 0.019692 ms MarkObjects: 0.945227 ms  DeleteObjects: 0.039019 ms)

Batchmode quit successfully invoked - shutting down!
Refresh: detecting if any assets need to be imported or removed ... Refresh: elapses 0.002118 seconds (Nothing changed)
Refresh: detecting if any assets need to be imported or removed ... Refresh: elapses 0.002037 seconds (Nothing changed)
[Package Manager] Server::Kill -- Server was shutdown
Cleanup mono
Exiting batchmode successfully now!

I figured it out, and there were two issues with my build script.

  • For windows, the path for the build needs to end in “.exe”
  • Scenes need to be relative to the projects ie. “Assets/Test.unity”

Unity silently ignores these errors and quits. I found them by getting the build report of the the BuildPipeline.BuildPlayer method. My working test script therefore looks like this:

class MyEditorScript 
{
    static void PerformBuild()
    {
        Debug.Log("### BUILDING ###");
        var report = BuildPipeline.BuildPlayer(
            new[] {"Assets/Test.unity"}, 
            "Build/Win/Test.exe", 
            BuildTarget.StandaloneWindows64,
            BuildOptions.None);
        
        Debug.Log("###   DONE   ###");

        Debug.Log(report);
    }
}