Cannot resolve and find solution. I want to create easy-extend structure and save data to ScriptableObjects.
For example I create 2 AudioSettings (assets) based on SettingsSO: DefaultSettings, CurrentSettings, then I'm going to set up Default on UnityEditor and store user's settings
in Current, if Current == null then Current = CreateInstance<Default>
.
So any setting group has 2 refs. In future I want add another setting groups in SettingManager and be able to add all of them in some list or dictionary and then foreach do something common. For example load default settings.
SettingsManager.cs
public class SettingsManager
{
[SerializeField] private SettingGroup<VideoSettings> _videoSettings;
[SerializeField] private SettingGroup<AudioSettings> _audioSettings;
private Dictionary<Type, SettingGroup> _settingDictionary;
public void Init()
{
_settingDictionary = new Dictionary<Type, SettingGroup>
{
{ _audioSettings.GetType(), _audioSettings },
{ _videoSettings.GetType(), _videoSettings }
};
}
private void LoadDefaultSetting()
{
foreach (var pair in _settingDictionary)
{
//var eachSettingGroup = (pair.Key)pair.Value; //Error Cannot resolve symbol 'pair'
//var eachSettingGroup = pair.Value as pair.Key; //Error Cannot resolve symbol 'pair'
//var eachSettingGroup = (typeof(pair.Key))pair.Value; //Error Cannot resolve symbol 'pair'
var eachSettingGroup = I need settings.Default HelpMeGuys!! (;
eachSettingGroup.Init();
}
}
}
SettingGroup.cs
public class SettingGroup<T> : SettingGroup where T : SettingsSO
{
public T Default => _default;
public T Current => _current;
public Type SettingsType => typeof(T);
[SerializeField] private T _default;
[SerializeField] private T _current;
private T _lastSaved;
public void Init()
{
if (_current == null)
{
Debug.LogWarning("Current settings reference not found. Default settings using instead without saving.");
_current = ScriptableObject.CreateInstance<T>();
_default.CopyDataTo(_current);
}
_lastSaved = ScriptableObject.CreateInstance<T>();
_current.CopyDataTo(_lastSaved);
}
}
AudioSettings.cs
public class AudioSettings : SettingsSO
{
public bool MusicEnabled;
public bool SoundEnabled;
public float MusicVolume;
public float SoundVolume;
}
SettingsSO.cs
public abstract class SettingsSO : ScriptableObject
{
public string Description;
}