Files
2026-01-06 22:42:15 -05:00

62 lines
2.4 KiB
C#

using System;
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
using SingularityGroup.HotReload.Editor.Localization;
namespace SingularityGroup.HotReload.Editor {
/// <summary>Includes HotReload Resources only in development builds</summary>
/// <remarks>
/// This build script ensures that HotReload Resources are not included in release builds.
/// <para>
/// When HotReload is enabled:<br/>
/// - include HotReloadSettingsObject in development Android builds.<br/>
/// - exclude HotReloadSettingsObject from the build.<br/>
/// When HotReload is disabled:<br/>
/// - excludes HotReloadSettingsObject from the build.<br/>
/// </para>
/// </remarks>
#pragma warning disable CS0618
internal class PrebuildIncludeResources : IPreprocessBuild, IPostprocessBuild {
#pragma warning restore CS0618
public int callbackOrder => 10;
// Preprocess warnings don't show up in console
bool warnSettingsNotSupported;
public void OnPreprocessBuild(BuildTarget target, string path) {
try {
if (HotReloadBuildHelper.IncludeInThisBuild()) {
// move scriptable object into Resources/ folder
HotReloadSettingsEditor.AddOrRemoveFromBuild(true);
} else {
// make sure HotReload resources are not in the build
HotReloadSettingsEditor.AddOrRemoveFromBuild(false);
var options = HotReloadSettingsEditor.LoadSettingsOrDefault();
var so = new SerializedObject(options);
if (IncludeInBuildOption.I.GetValue(so)) {
warnSettingsNotSupported = true;
}
}
} catch (BuildFailedException) {
throw;
} catch (Exception ex) {
throw new BuildFailedException(ex);
}
}
public void OnPostprocessBuild(BuildTarget target, string path) {
if (warnSettingsNotSupported) {
Debug.LogWarning(Translations.Errors.WarningBuildSettingsNotSupported);
}
}
// Do nothing in post build. settings asset will be dirty if build fails, so not worth fixing just for successful builds.
// [PostProcessBuild]
// private static void PostBuild(BuildTarget target, string pathToBuiltProject) {
// }
}
}