- Home /
How to Update ScriptableObject
I have a database of skills that inherit from scriptableobject.
[Serializable]
public class ISSkill : ISObject, IISSkill, ScriptableObject
Then i have a Generic List of ScriptableObjects:
public abstract class ScriptableObjectDatabase<T> : ScriptableObject where T : ScriptableObject
{
[SerializeField]
protected List<T> database = new List<T>();
When I add Items everything tracks nicely into the database and creates a scriptable object in my project panel. Using the wiki CreateAsset code. I know there is missing curly brackets. Just from the code snippet.
public override void Add(ISSkill item)
{
ScriptableObjectUtility.CreateAsset<ISSkill>(GetPath() + SKILL_INVENTORY_PATH, item);
database.Add(item);
// Flags changes and saves
EditorUtility.SetDirty(this);
}
Here is the CreateAssest Function:
public static void CreateAsset<T>(string path, T item) where T : ScriptableObject
{
if (!AssetDatabase.IsValidFolder(path))
ValidatePath(path);
string assetPathAndName = path + "/" + item.name + ".asset";
AssetDatabase.CreateAsset(item, assetPathAndName);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
EditorUtility.SetDirty(item);
Selection.activeObject = item;
}
Then i have a replace method that basically updates the oldSkill with new skill in database. This works nicely in the database. But my UpdateAsset Method doesnt seem to be working and i dont know why or how to update the scriptableobject in the project panel.
public void Replace(int indexOfOldItem, T item)
{
T newItem = ScriptableObjectUtility.UpdateAsset<T>(database[indexOfOldItem], item);
database[indexOfOldItem] = newItem;
EditorUtility.SetDirty(this);
}
Here is the UpdateAsset function
public static T UpdateAsset<T>(T oldItem, T newItem) where T : ScriptableObject
{
string path = AssetDatabase.GetAssetPath(oldItem);
T asset = AssetDatabase.LoadAssetAtPath(path, typeof(T)) as T;
asset = newItem;
asset.name = newItem.name;
AssetDatabase.Refresh();
EditorUtility.SetDirty(asset);
return asset;
}
I know this is a lot of code but if anyone can help me figure this out, i thank you in advanced!
Answer by TheCaptainJuneBug · May 31, 2016 at 01:21 PM
Forgot that i was making a copy of a Skill so therefore it lost its connection to the ScriptableObject in the project panel
Your answer
Follow this Question
Related Questions
Distribute terrain in zones 3 Answers
Serialize a list of scriptable objects to Json 0 Answers
Is it bad practice to have method definitions in a Scriptable Object? 0 Answers
Polymorphism with generic ScriptableObjects? 1 Answer
How do you save a reference to a prefab's script in a ScriptableObject? 0 Answers