关于Unity3D的ScriptableObject保存的一些问题记录

在通过脚本在游戏中或者编辑器状态下对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的MonoBehaviourScriptableObject变量,必须告诉Unity该值已经改变。每当一个属性发生变化,Unity内置组件在内部调用setDirty。MonoBehaviourScriptableObject不自动做这个,因此如果你想值被保存,必须调用SetDirty。

---------------------------------------2020.6.2  更新----------------------------------------------------------

今天做保存assest文件时单独调用了SetDirty方法,结果退出运行模式时更改又撤销了;

后来问了大佬才知道还要加多一句

     //
     // 摘要:
     //     Writes all unsaved asset changes to disk.
    UnityEditor.AssetDatabase.SaveAssets();

不知道为啥单独用SetDirty不行了,不过总算搞定问题!

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值