|
using System; |
|
using UnityEngine; |
|
#if UNITY_EDITOR |
|
using UnityEditor; |
|
#else |
|
using System.Linq; |
|
#endif |
|
|
|
namespace Unity.MLAgents |
|
{ |
|
#if UNITY_EDITOR |
|
[InitializeOnLoad] |
|
#endif |
|
internal static class MLAgentsSettingsManager |
|
{ |
|
internal static event Action OnSettingsChange; |
|
internal const string EditorBuildSettingsConfigKey = "com.unity.ml-agents.settings"; |
|
private static MLAgentsSettings s_Settings; |
|
|
|
|
|
|
|
public static MLAgentsSettings Settings |
|
{ |
|
get |
|
{ |
|
if (s_Settings == null) |
|
{ |
|
Initialize(); |
|
} |
|
return s_Settings; |
|
} |
|
set |
|
{ |
|
Debug.Assert(value != null); |
|
#if UNITY_EDITOR |
|
if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(value))) |
|
{ |
|
EditorBuildSettings.AddConfigObject(EditorBuildSettingsConfigKey, value, true); |
|
} |
|
#endif |
|
s_Settings = value; |
|
ApplySettings(); |
|
} |
|
} |
|
|
|
static MLAgentsSettingsManager() |
|
{ |
|
Initialize(); |
|
} |
|
|
|
static void Initialize() |
|
{ |
|
#if UNITY_EDITOR |
|
InitializeInEditor(); |
|
#else |
|
InitializeInPlayer(); |
|
#endif |
|
} |
|
|
|
#if UNITY_EDITOR |
|
internal static void InitializeInEditor() |
|
{ |
|
var settings = ScriptableObject.CreateInstance<MLAgentsSettings>(); |
|
if (EditorBuildSettings.TryGetConfigObject(EditorBuildSettingsConfigKey, |
|
out MLAgentsSettings settingsAsset)) |
|
{ |
|
if (settingsAsset != null) |
|
{ |
|
settings = settingsAsset; |
|
} |
|
} |
|
Settings = settings; |
|
} |
|
|
|
#else |
|
internal static void InitializeInPlayer() |
|
{ |
|
Settings = Resources.FindObjectsOfTypeAll<MLAgentsSettings>().FirstOrDefault() ?? ScriptableObject.CreateInstance<MLAgentsSettings>(); |
|
} |
|
|
|
#endif |
|
|
|
internal static void ApplySettings() |
|
{ |
|
OnSettingsChange?.Invoke(); |
|
} |
|
|
|
internal static void Destroy() |
|
{ |
|
s_Settings = null; |
|
OnSettingsChange = null; |
|
} |
|
} |
|
} |
|
|