【发布时间】:2016-11-15 18:52:13
【问题描述】:
使用 Unity 5.4.2。
我创建了一个编辑器脚本,当您按下导出按钮时,该脚本会为某些预制数据实现导出器。它递归地在其自己的目录下查找与某种类型匹配的所有预制文件并加载这些预制件,以便可以以自定义方式导出它们。
我遇到的问题是磁盘上的预制件加载了
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file);
与编辑器中的当前状态不匹配。也就是说,如果您在编辑器中修改了一些预制数据,它实际上并没有保存到磁盘。请注意,这不需要将任何对象添加到场景中,我只是直接从附加到预制件的组件中导出数据。
我尝试将AssetDatabase.SaveAssets(); 添加到我的导出函数的顶部,这应该保存所有资产,但是当我编辑一个值然后记录从预制件加载的值时,它们不是最新的。到目前为止,我发现有两种(非编程)方法可以使我的导出器能够看到修改后的数据:
- 如果我退出 Unity 并重新启动它,预制件似乎会在此时保存,并且导出器会看到更新的数据。
- 如果我播放并停止任何场景,然后导出,导出器可以看到更新的数据,但奇怪的是(根据 git 状态)它们还没有写入磁盘,所以我怀疑
LoadAssetAtPath实际上加载了一些缓存版本在“播放”时更新。
有没有办法强制 Unity 将所有内容保存到磁盘,以便我的导出器可以对最新值进行操作?
【问题讨论】:
-
注意:我实际上已经解决了我遇到的问题,但最初的问题仍然存在,因为在我的实验过程中,我已经确认
SaveAssets实际上并没有按照它在锡上所说的那样做并将内容写入磁盘。我还发现LoadAssetAtPath也没有按照它在锡上所说的去做(如果它已经加载,它实际上会返回资产的编辑器内存版本)。
标签: unity3d