Есть что-то на подобии этого Scriptable Object
using UnityEngine;
[CreateAssetMenu(fileName="EmptyItem", menuName="New Item", order=1)]
public class ItemScriptableObject : ScriptableObject
{
public int currentCount = 1;
}
Все нормально работает, данные из него можно получить если записать в каком-то скрипте в какую-то переменную, но вот загвоздка:
Если попытаться обратиться к переменной с этим Scriptable Object, то изменятся данные для ВСЕХ классов которые унаследованы от этого Scriptable Object
Ну допусти у нас есть 2 таких Scriptable Object, для удобства сделаем им имена
public class ItemScriptableObject : ScriptableObject
{
public string itemName = "one";
public int currentCount = 1; // первый
}
// другой Scriptable Object
public class ItemScriptableObject : ScriptableObject
{
public string itemName = "two";
public int currentCount = 3;
}
Запишем эти 2 (и далее) объекта в переменные
public ItemScriptableObject item1; // one
public ItemScriptableObject item2; // two
public ItemScriptableObject item3; // еще один two для теста
Теперь попробуем получить, потом изменить, а потом снова получить значения, после чего получим значение из item3 который мне не трогали до этого и фактически там должно быть значение по умолчанию...
item1.currectCount; // = 1
item1.currectCount += 1;
item1.currectCount; // = 2
item2.currectCount; // = 3
item2.currectCoun += 3;
item2.currectCount; // = 6
// теперь берем объект который мы не трогали!
item3.currectCount; // = 6
// хотя по умолчанию у объекта должно быть значение 3, но в итоге при изменении значений одного экземпляра меняются значения во всех его копиях
Я уже придумал решение хранить "изменяемые" значения в экземпляре класса который хранит в себе класс объекта, но все таки хочется узнать из-за чего такое происходит и можно ли избежать этого?