Я не вижу код ScriptableObjects.
Но вы должны либо использовать CreateInstance(Type)
, который возвращает ScriptableObject
, и привести созданный экземпляр к вашему типу:
GenerateItem o = (GenerateItem) ScriptableObject.CreateInstance(typeof(GenerateItem));
Или просто используйте типизированную версию ScriptableObject.CreateInstance<Type>()
, которая возвращает Type
и, следовательно, не требует типовой трансляции (я предпочитаю эту)
GenerateItem o = ScriptableObject.CreateInstace<GenerateItem>();
Чем вы можете установить свойства как обычно
o.<some property> = <some value>;
Обратите внимание, что свойства / поля конечно должны быть общедоступными для этого решения.
В качестве альтернативы есть какой-то
public void SetValues(string name, float value1, float value2, Button button, Slider slider1, Slider slider2, Text text)
{
// Apply values
<some property> = <some value>
/* ... */
}
метод внутри ScriptableObjects, так что вы можете просто вызвать
o.SetValues("OxyGen", 0.5f, 50f, a, c, b, d);
Еще одна альтернатива (и мне лично она нравится больше всего)
Разрешить установку значений только при создании экземпляра и защитить их от последующих прямых изменений. В GenerationItem
есть метод, который полностью заботится о создании и установке значений
public static GenerateItem CreateInstance(string name, float value1, float value2, Button button, Slider slider1, Slider slider2, Text text)
{
// Let the method itself take care of the Instantiated
// You don't need "ScriptableObject." since this class inherits from it
GenerateItem o = CreateInstance<GenerateItem>();
// Then directly set the values
o.<some property> = <some value>;
/* .... */
return o;
}
Так что позже в вашем классе вы просто должны позвонить
var o = GenerateItem.CreateInstance("OxyGen", 0.5f, 50f, a, c, b, d);
Это гарантирует, что значения не могут быть изменены после этого так просто. Зависит от ваших потребностей.