using System; using UnityEditor; using UnityEditor.Build; using UnityEngine; namespace SingularityGroup.HotReload.Editor { /// Includes HotReload Resources only in development builds /// /// This build script ensures that HotReload Resources are not included in release builds. /// /// When HotReload is enabled:
/// - include HotReloadSettingsObject in development Android builds.
/// - exclude HotReloadSettingsObject from the build.
/// When HotReload is disabled:
/// - excludes HotReloadSettingsObject from the build.
///
///
#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("Hot Reload was not included in the build because one or more build settings were not supported."); } } // 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) { // } } }