| 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; |
| } |
| } |
| } |
|
|