2022-01-16 05:40:49 +03:00

135 lines
4.5 KiB
C#

namespace HeurekaGames.AssetHunterPRO
{
using System.Linq;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
#if UNITY_2018_1_OR_NEWER
using UnityEditor.Build.Reporting;
using UnityEditor.Build;
class AH_BuildProcessor : IPreprocessBuildWithReport, IPostprocessBuildWithReport, IProcessSceneWithReport
{
public void OnProcessScene(UnityEngine.SceneManagement.Scene scene, BuildReport report)
{
//For some reason I have to do both recursive, and non-recursive version
string[] dependencies = AssetDatabase.GetDependencies(scene.path, true);
dependencies.ToList().AddRange(AssetDatabase.GetDependencies(scene.path, false));
{
foreach (string dependency in dependencies)
processUsedAsset(scene.path, dependency);
}
}
public void OnPreprocessBuild(BuildReport report)
{
initBuildReport(report.summary.platform, report.summary.outputPath);
}
public void OnPostprocessBuild(BuildReport report)
{
finalizeBuildReport(report);
}
private void finalizeBuildReport(BuildReport report)
{
addBuildReportInfo(report);
//Dont force add special folders (resources etc) in 2018.1 because we have asccess to buildreport
finalizeBuildReport(report.summary.platform);
}
private void addBuildReportInfo(BuildReport report)
{
if(buildInfo != null)
buildInfo.ProcessBuildReport(report);
}
#elif UNITY_5_6_OR_NEWER
using UnityEditor.Build;
class AH_BuildProcessor : IProcessScene, IPreprocessBuild, IPostprocessBuild
{
public void OnPreprocessBuild(BuildTarget target, string path)
{
initBuildReport(target, path);
}
public void OnProcessScene(UnityEngine.SceneManagement.Scene scene)
{
Debug.Log("AH: Processing scene: " + scene.name);
string[] dependencies = AssetDatabase.GetDependencies(scene.path, true);
{
foreach (string dependency in dependencies)
processUsedAsset(scene.path, dependency);
}
}
public void OnPostprocessBuild(BuildTarget target, string path)
{
finalizeBuildReport(target);
}
#endif
//#if UNITY_5_6_OR_NEWER
static AH_SerializedBuildInfo buildInfo;
private bool isProcessing;
//private static bool isGenerating;
private void initBuildReport(BuildTarget platform, string outputPath)
{
//Only start processing if its set in preferences
isProcessing = AH_SettingsManager.Instance.AutoCreateLog /*|| isGenerating*/;
if (isProcessing)
{
Debug.Log("AH: Initiated new buildreport - " + System.DateTime.Now);
buildInfo = new AH_SerializedBuildInfo();
}
else
{
Debug.Log("AH: Build logging not automatically started. Open Asset Hunter preferences if you want it to run");
}
}
private void finalizeBuildReport(BuildTarget target)
{
if (isProcessing)
{
isProcessing = false;
Debug.Log("AH: Finalizing new build report - " + System.DateTime.Now);
buildInfo.FinalizeReport(target);
}
}
/*internal static void GenerateBuild()
{
isGenerating = true;
string path = EditorUtility.SaveFolderPanel("Choose Location of Build", "", "");
BuildPlayerOptions bpOptions = new BuildPlayerOptions();
bpOptions.locationPathName = path + "/AH_GeneratedBuild.exe";
bpOptions.scenes = EditorBuildSettings.scenes.Where(val => val.enabled).Select(val => val.path).ToArray<string>();
bpOptions.target = EditorUserBuildSettings.activeBuildTarget;
bpOptions.targetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
bpOptions.options = BuildOptions.None;
// Build player.
BuildPipeline.BuildPlayer(bpOptions);
}*/
private void processUsedAsset(string scenePath, string assetPath)
{
if (isProcessing)
buildInfo.AddBuildDependency(scenePath, assetPath);
}
public int callbackOrder { get { return 0; } }
}
//#endif
}