Почему в ScriptableObject сбрасывает переменные Unity
У меня есть такой класс унаследованный от ScriptableObject:
[CreateAssetMenu(fileName = "Weapon", menuName = "Weapon/DataWeapon")]
public class WeaponData : ScriptableObject
{
public static List<String> namesClass = new List<String>();
//DropdownString это атрибут который создает пополняемый выпадающий список
[DropdownString(nameof(GetTypesWeapons))] public string TypeWeaponName;
public IWeapon WeaponInstance { get; private set; }
private List<WeaponDataFieldInfo> _info = new List<WeaponDataFieldInfo>();
private List<object> _values = new List<object>();
string[] GetTypesWeapons()
{
namesClass.Add("None");
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
foreach (Type type in types.Where(t => typeof(IWeapon).IsAssignableFrom(t)))
{
if (type != typeof(IWeapon)) namesClass.Add(type.ToString());
}
return namesClass.ToArray();
}
private void OnValidate()
{
if (TypeWeaponName == "None")
{
WeaponInstance = null;
_values.Clear();
_info.Clear();
return;
}
if (TypeWeaponName != nameof(WeaponInstance))
{
Assembly assembly = typeof(IWeapon).Assembly;
Type type = assembly.GetType(TypeWeaponName);
WeaponInstance = CreateInstance(type) as IWeapon;
_values.Clear();
_info.Clear();
_info = GetMembersInstance(WeaponInstance);
foreach (WeaponDataFieldInfo info in _info) _values.Add(info.Value);
}
}
private List<WeaponDataFieldInfo> GetMembersInstance(object instance)
{
List<WeaponDataFieldInfo> fieldInfo = new List<WeaponDataFieldInfo>();
BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
MemberInfo[] members = instance.GetType().GetMembers(flags);
foreach (MemberInfo member in members)
{
if (member.CustomAttributes.ToArray().Length > 0)
{
WeaponDataField attribute = member.GetCustomAttribute<WeaponDataField>();
if (attribute != null)
{
fieldInfo.Add(new WeaponDataFieldInfo(member, attribute, this));
}
}
}
return fieldInfo;
}
//Дальше там остальной код но на мою ошибку он не влияет
Когда я работаю в Editor, то все нормально. Но после запуска игры OnValidate() выполняется, а значения WeaponInstance, _info и _values становится null. В итоге выполняется код в этой проверке if (TypeWeaponName != nameof(WeaponInstance)) и создается новый инстенс(то есть, значения сбрасываются). Как сохранить эти значения?