@Tiubert

Как изменять данные в отдельном Scriptable Object?

Есть что-то на подобии этого 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, но в итоге при изменении значений одного экземпляра меняются значения во всех его копиях


Я уже придумал решение хранить "изменяемые" значения в экземпляре класса который хранит в себе класс объекта, но все таки хочется узнать из-за чего такое происходит и можно ли избежать этого?
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
ScriptableObject - это asset, по сути файл на диске. Ты можешь иметь хоть 100500 ссылок на него, но изменяешь ты всё равно этот файл. Собственно это ничем не отличается от любых классов у которых есть понятие экземпляр.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы