问题描述
我在 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
解决方法
好的。
看起来可脚本化的对象文件无法存储接口实现示例。
其他数据都写入文件好了,
如果我错了,请纠正我。