Объявление
public bool Build();Возвращает
bool Возвращает true, если сборка запущена. Возвращает false, если сборка не была запущена из-за того, что редактор в данный момент компилирует скрипты в папке Assets.
Описание
Запускает сборку сборки.
Во время сборки маленький значок хода выполнения в правом нижнем углу главного окна Unity будет вращаться, и EditorApplication.isCompiling вернет значение true.
Используйте AssemblyBuilder.buildStarted и AssemblyBuilder.buildFinished, чтобы получать уведомления о завершении сборки. началось и закончилось.
Смотрите так же: AssemblyBuilder.buildStarted, AssemblyBuilder.buildFinished, AssemblyBuilder.status.
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Compilation;
using UnityEngine;
public class AssembyBuilderExample
{
[MenuItem("AssemblyBuilder Example/Build Assembly Async")]
public static void BuildAssemblyAsync()
{
BuildAssembly(false);
}
[MenuItem("AssemblyBuilder Example/Build Assembly Sync")]
public static void BuildAssemblySync()
{
BuildAssembly(true);
}
static void BuildAssembly(bool wait)
{
var scripts = new[] { "Temp/MyAssembly/MyScript1.cs", "Temp/MyAssembly/MyScript2.cs" };
var outputAssembly = "Temp/MyAssembly/MyAssembly.dll";
var assemblyProjectPath = "Assets/MyAssembly.dll";
Directory.CreateDirectory("Temp/MyAssembly");
// Создаем скрипты
foreach (var scriptPath in scripts)
{
var scriptName = Path.GetFileNameWithoutExtension(scriptPath);
File.WriteAllText(scriptPath, string.Format("using UnityEngine; public class {0} : MonoBehaviour {{ void Start() {{ Debug.Log(\"{0}\"); }} }}", scriptName));
}
var assemblyBuilder = new AssemblyBuilder(outputAssembly, scripts);
// Исключить ссылку на копию сборки в папке Assets, если таковая имеется.
assemblyBuilder.excludeReferences = new string[] { assemblyProjectPath };
// Вызывается в основном потоке
assemblyBuilder.buildStarted += delegate(string assemblyPath)
{
Debug.LogFormat("Assembly build started for {0}", assemblyPath);
};
// Вызывается в основном потоке
assemblyBuilder.buildFinished += delegate(string assemblyPath, CompilerMessage[] compilerMessages)
{
var errorCount = compilerMessages.Count(m => m.type == CompilerMessageType.Error);
var warningCount = compilerMessages.Count(m => m.type == CompilerMessageType.Warning);
Debug.LogFormat("Assembly build finished for {0}", assemblyPath);
Debug.LogFormat("Warnings: {0} - Errors: {0}", errorCount, warningCount);
if(errorCount == 0)
{
File.Copy(outputAssembly, assemblyProjectPath, true);
AssetDatabase.ImportAsset(assemblyProjectPath);
}
};
// Start build of assembly
if(!assemblyBuilder.Build())
{
Debug.LogErrorFormat("Failed to start build of assembly {0}!", assemblyBuilder.assemblyPath);
return;
}
if(wait)
{
while(assemblyBuilder.status != AssemblyBuilderStatus.Finished)
System.Threading.Thread.Sleep(10);
}
}
}