ScriptableObject在Inspector上修改数据时,编辑器可以自己把改动保存到文件里。
但在自定义窗口中修改ScriptableObject的数据,虽然在编辑器里看着数据已经被修改了,但实际上文件并未被修改,下一次打开unity还会还原,需要手动去设脏数据,然后保存。
using UnityEditor;
using UnityEngine;
public class SaveSample : EditorWindow
{
[MenuItem("ScriptableObject示例/保存示例")]
public static void Open()
{
SaveSample sample = GetWindow<SaveSample>();
sample.Show();
}
private SampleScriptableObject asset;
private void OnGUI()
{
asset = EditorGUILayout.ObjectField("资源", asset, typeof(SampleScriptableObject)) as SampleScriptableObject;
if (asset == null) return;
asset.id = EditorGUILayout.TextField("ID", asset.id);
asset.color = EditorGUILayout.ColorField("Color", asset.color);
if (GUILayout.Button("保存"))
{
EditorUtility.SetDirty(asset);
AssetDatabase.SaveAssetIfDirty(asset);
}
}
}
关键代码:
EditorUtility.SetDirty(); AssetDatabase.SaveAssetIfDirty();