在编辑器模式下从代码修改的 ScriptableObject 数据,但包含未更改的资产文件

问题描述

我在 MonoBehavIoUr 类中有一个 ScriptableObject 引用。

使用 CustomEditor 按钮修改其值。

保存。

值似乎已更改。 甚至选定的 ScriptableObject Inspector 也会显示修改后的数据。

但是磁盘上的资产文件没有任何数据。 并且没有来自任何其他 MonoBehavIoUr 实例的代码的可用数据。

这是用于保存我的 ScriptableObject代码片段。

public TextAsset text;
[Serializefield]
//Thats My Scriptable Object
public PathFramesList pathFramesList;
[Serializefield]
public List<List<ICurveData>> frameDatasList = new List<List<ICurveData>>();
// Called By CustomEditor Button
public void ReadData()
{
    #region BlahBlahBlah generating some data to save

    var separator = new string[] { "%" };
    var framesUnparsedData = text.text.Split(separator,StringSplitOptions.None);
    foreach (var f in framesUnparsedData)
        frameDatasList.Add(ParseFrame(f));
    var result = new ICurveData[frameDatasList.Count][];
    for (int i = 0; i < frameDatasList.Count; i++)
        result[i] = frameDatasList[i].ToArray();

    #endregion

    #region Trying to save data

    pathFramesList.frameDatasList = result; // Set data to object
    EditorUtility.SetDirty(pathFramesList); // Even This didn't help
    AssetDatabase.SaveAssets(); // Looks it doesn't work
    AssetDatabase.Refresh(); // Hoped this will help,whatever it do

    #endregion

}

这就是我的 ScriptableObjectClass 以及它的自定义编辑器

[CreateAssetMenu(fileName = "ParsedpathData",menuName = "Create Path Data Asset")]
[System.Serializable]
public class PathFramesList : ScriptableObject
{
    [Serializefield]
    public ICurveData[][] frameDatasList;
}

#if UNITY_EDITOR
[CustomEditor(typeof(PathFramesList))]
public class PathFramesListEditor : Editor
{
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        PathFramesList pathFrameList = (PathFramesList)target;
        if(pathFrameList.frameDatasList == null)
        {
            GUILayout.TextField("Frames Count is 0");
        }
        else
        {
            // It still has all data
            GUILayout.TextField("Frames Count is " + pathFrameList.frameDatasList.Length,200);
        }
        if(GUILayout.Button("SaveAsset"))
        {
            // Tried to force saving with this) Didn't help
            
            EditorUtility.SetDirty(target);
            EditorUtility.SetDirty(serializedobject.targetobject);
            serializedobject.Update();
            serializedobject.ApplyModifiedProperties();
            AssetDatabase.SaveAssets();
        }
    }
}
#endif

解决方法

好的。
看起来可脚本化的对象文件无法存储接口实现示例。
其他数据都写入文件好了,
如果我错了,请纠正我。