您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

109 行
3.1 KiB

using System;
using UnityEngine;
using UnityEditor;
using UnityEditor.Build.Reporting;
using System.Diagnostics;
using Debug = UnityEngine.Debug;
public class BuildTemplate : BuildFrontendAssetBase
{
public bool BuildEnabled
{
get { return EditorPrefs.GetBool(preferenceName, true); }
set { EditorPrefs.SetBool(preferenceName, value); }
}
string preferenceName
{
get { return $"BuildFrontend.{AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(this))}.Enabled"; }
}
[Header("Build Template")]
public string BuildPath;
public string ExecutableName;
public bool CleanupBeforeBuild = true;
public BuildProfile Profile;
public SceneList SceneList;
protected override void Awake()
{
base.Awake();
if (BuildPath == null)
BuildPath = "Build/";
}
public BuildReport DoBuild(bool run = false)
{
BuildReport report = null;
if (BuildEnabled)
{
try
{
EditorUtility.DisplayProgressBar("Build Frontend", $"Building player : {name}", 0.0f);
BuildOptions options = BuildOptions.None;
if (Profile.DevPlayer)
options |= BuildOptions.Development;
if(CleanupBeforeBuild && System.IO.Directory.Exists(BuildPath))
{
EditorUtility.DisplayProgressBar("Build Frontend", $"Cleaning up folder : {BuildPath}", 0.05f);
System.IO.Directory.Delete(BuildPath, true);
System.IO.Directory.CreateDirectory(BuildPath);
}
report = BuildPipeline.BuildPlayer(SceneList.scenePaths, BuildPath + ExecutableName, Profile.Target, options);
if (run)
{
if (
report.summary.result == BuildResult.Succeeded ||
EditorUtility.DisplayDialog("Run Failed Build", "The build has failed or has been canceled, do you want to attempt to run previous build instead?", "Yes", "No")
)
{
RunBuild();
}
}
}
catch(Exception e)
{
Debug.LogException(e, this);
}
finally
{
EditorUtility.ClearProgressBar();
}
}
else
{
Debug.LogWarning("Build is disabled");
}
return report;
}
public bool canRunBuild
{
get
{
return System.IO.File.Exists(Application.dataPath + "/../" + BuildPath + ExecutableName);
}
}
public void RunBuild()
{
ProcessStartInfo info = new ProcessStartInfo();
string path = Application.dataPath + "/../" + BuildPath;
info.FileName = path + ExecutableName;
info.WorkingDirectory = path;
info.UseShellExecute = false;
EditorUtility.DisplayProgressBar("Build Frontend",$"Running Player : {info.FileName}", 1.0f);
Process process = Process.Start(info);
}
}