123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- using System;
- using System.IO;
- using UnityEditor;
- using UnityEditor.Build;
- using UnityEngine;
- namespace SingularityGroup.HotReload.Editor {
- internal static class HotReloadBuildHelper {
- /// <summary>
- /// Should HotReload runtime be included in the current build?
- /// </summary>
- public static bool IncludeInThisBuild() {
- return IsAllBuildSettingsSupported();
- }
- /// <summary>
- /// Get scripting backend for the current platform.
- /// </summary>
- /// <returns>Scripting backend</returns>
- public static ScriptingImplementation GetCurrentScriptingBackend() {
- #pragma warning disable CS0618
- return PlayerSettings.GetScriptingBackend(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));
- #pragma warning restore CS0618
- }
- public static ManagedStrippingLevel GetCurrentStrippingLevel() {
- #pragma warning disable CS0618
- return PlayerSettings.GetManagedStrippingLevel(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));
- #pragma warning restore CS0618
- }
- public static void SetCurrentScriptingBackend(ScriptingImplementation to) {
- #pragma warning disable CS0618
- // only set it if default is not correct (avoid changing ProjectSettings when not needed)
- if (GetCurrentScriptingBackend() != to) {
- PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup, to);
- }
- #pragma warning restore CS0618
- }
-
- public static void SetCurrentStrippingLevel(ManagedStrippingLevel to) {
- #pragma warning disable CS0618
- // only set it if default is not correct (avoid changing ProjectSettings when not needed)
- if (GetCurrentStrippingLevel() != to) {
- PlayerSettings.SetManagedStrippingLevel(EditorUserBuildSettings.selectedBuildTargetGroup, to);
- }
- #pragma warning restore CS0618
- }
- /// Is the current build target supported?
- /// main thread only
- public static bool IsBuildTargetSupported() {
- var buildTarget = EditorUserBuildSettings.selectedBuildTargetGroup;
- return Array.IndexOf(unsupportedBuildTargets, buildTarget) == -1;
- }
-
- /// Are all the settings supported?
- /// main thread only
- static bool IsAllBuildSettingsSupported() {
- if (!IsBuildTargetSupported()) {
- return false;
- }
- // need way to give it settings object, dont want to give serializedobject
- var options = HotReloadSettingsEditor.LoadSettingsOrDefault();
- var so = new SerializedObject(options);
-
- // check all projeect options
- foreach (var option in HotReloadSettingsTab.allOptions) {
- var projectOption = option as ProjectOptionBase;
- if (projectOption != null) {
- // if option is required, build can't use hot reload
- if (projectOption.IsRequiredForBuild() && !projectOption.GetValue(so)) {
- return false;
- }
- }
- }
- return GetCurrentScriptingBackend() == ScriptingImplementation.Mono2x
- && GetCurrentStrippingLevel() == ManagedStrippingLevel.Disabled
- && EditorUserBuildSettings.development;
- }
- /// <summary>
- /// Some platforms are not supported because they don't have Mono scripting backend.
- /// </summary>
- /// <remarks>
- /// Only list the platforms that definately don't have Mono scripting.
- /// </remarks>
- private static readonly BuildTargetGroup[] unsupportedBuildTargets = new [] {
- BuildTargetGroup.iOS, // mono support was removed many years ago
- BuildTargetGroup.WebGL, // has never had mono
- };
-
- #pragma warning disable CS0618
- public static bool IsMonoSupported(BuildTargetGroup buildTarget) {
- var backend = PlayerSettings.GetScriptingBackend(buildTarget);
- try {
- // GetDefaultScriptingBackend returns IL2CPP for Unity 6 which goes against Unity documentation.
- // Have to use a workaround approach instead
- PlayerSettings.SetScriptingBackend(buildTarget, ScriptingImplementation.Mono2x);
- return PlayerSettings.GetScriptingBackend(buildTarget) == ScriptingImplementation.Mono2x;
- } catch {
- return false;
- } finally {
- PlayerSettings.SetScriptingBackend(buildTarget, backend);
- }
- }
- #pragma warning restore CS0618
- }
- }
|