Scriptable object saving

I have issue with scriptable objects. Well big one actually and I would be really glad if anyone could help.

I have created several in engine editors for several parts of my game (like map, items, npcs etc.) and I save data created by it to scriptable objects. Everything works great until I close the editor and reopen it. Data I created in last instance are nulled. The objects still exist but have absolutely no data. This affects only new data. I don’t remember the exact moment when it went wrong. Any idea what have I done wrong?

edit: forgot to mention that I saved the scene before quitting. I always thought that this was responsible for saving the data.


public static void SetDirty(Object target);
Parameters target The object to mark as dirty.
Description Marks target object as dirty. (Only suitable for non-scene objects).
NOTE: ‘‘Prior to Unity 5.3, this was the primary method of marking objects as dirty. From 5.3 onwards, with the introduction of Multi-Scene Editing, this function should no-longer be used for modifying objects in scenes. Instead, you should use Undo.RecordObject prior to making changes to the object. This will mark the object’s scene as dirty and provide an undo entry in the editor.’’
If you are modifying files within a scene and specifically do not want to add an undo entry for your modification, you should use EditorSceneManager.MarkSceneDirty
If you are using a custom editor to modify serialized properties on a component or an asset, you should be using [pSerializedObject.FindProperty]], SerializedObject.Update, EditorGUILayout.PropertyField, and SerializedObject.ApplyModifiedProperties. This will mark the modified object as ‘dirty’ and create Undo states for you.
Therefore the only remaining situation in which you should use this function is if you are modifying non-scene objects via some other means, and specifically do not want create an undo entry for your modification. This is rare, and unless you’re very sure about requiring this, you probably shouldn’t be using this command!
Unity internally uses the dirty flag to find out when assets have changed and need to be saved to disk.
If you do not want to read this basically it is saying it saves objects when edited in your custom editor, or in many of the other events described above, to disk. So if you are using Scriptable Objects for very basic things this is not needed really. So here is something to read more in to.


I had a similar problem.
I don’t know if my solution works for you. I had data structures that could not be serialized by unity (3d integer array int[,]) I fixed my problems by flattening the 3d array to 1 dimension.