如何解决在编辑器模式下从代码修改的 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
解决方法
好的。
看起来可脚本化的对象文件无法存储接口实现示例。
其他数据都写入文件好了,
如果我错了,请纠正我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。