赞
踩
在通过脚本在游戏中或者编辑器状态下对ScriptableObject进行了修改,关闭编辑器后之前的修改又都没了,原因是在修改后要调用下面这个方法才能保存;
EditorUtility.SetDirty(target);
其中, target代表你需要序列化的对象, 在项目中, 为对应的ScriptableObject.
static function SetDirty (target : Object) : void
Description描述
Marks target object as dirty.
标记目标物体已改变。
Unity internally uses the dirty flag to find out when assets have changed and need to be saved to disk.
当资源已改变并需要保存到磁盘,Unity内部使用dirty标识来查找。
E.g. if you modify a prefab's MonoBehaviour or ScriptableObject variables, you must tell Unity that the value has changed. Unity builtin components internally call SetDirty whenever a property changes. MonoBehaviour or ScriptableObject don't do this automatically so if you want your value to be saved you need to call SetDirty.
例如,如果修改一个prefab的MonoBehaviour或ScriptableObject变量,必须告诉Unity该值已经改变。每当一个属性发生变化,Unity内置组件在内部调用setDirty。MonoBehaviour或ScriptableObject不自动做这个,因此如果你想值被保存,必须调用SetDirty。
---------------------------------------2020.6.2 更新----------------------------------------------------------
今天做保存assest文件时单独调用了SetDirty方法,结果退出运行模式时更改又撤销了;
后来问了大佬才知道还要加多一句
//
// 摘要:
// Writes all unsaved asset changes to disk.
UnityEditor.AssetDatabase.SaveAssets();
不知道为啥单独用SetDirty不行了,不过总算搞定问题!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。