使用Unity 5.4.2。
我创建了一个编辑器脚本,当您按下导出按钮时,该脚本会为某些预制数据实现导出器。它以递归方式查找在其自己的目录下与特定类型匹配的所有预制文件,并加载这些预制件,以便以自定义方式导出它们。
我遇到的问题是磁盘上的预装件已加载
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file);
与编辑器中的当前状态不匹配。也就是说,如果您在编辑器中修改了一些预制数据,它实际上并没有保存到磁盘。请注意,这不需要将任何对象添加到场景中,我只是直接从连接到预制件的组件中导出数据。
我已经尝试将AssetDatabase.SaveAssets();
添加到导出功能的顶部,该功能应该保存所有资源,但是当我编辑一个值然后记录从预制件加载的值时,它们不能达到日期。到目前为止,我发现有两种(非编程)方法可以使我的导出器能够看到修改后的数据:
LoadAssetAtPath
实际上加载了一些缓存在'play'上更新的版本。有没有办法强制Unity将所有内容保存到磁盘,以便我的导出器可以运行最新的值?
答案 0 :(得分:0)
以下应该做的伎俩
// Your changes go here
AssetDatabase.Save();
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); // perhaps even ForceSynchronousImport?
// You loading should go here
有关ImportAssetOptions
的详情,请参阅此文档https://docs.unity3d.com/ScriptReference/ImportAssetOptions.html
答案 1 :(得分:0)
注意:这不能回答原始问题,但识别和解决原因可能会帮助任何有相同/类似问题的人。
我的问题是在附加到预制件的组件中导出计算和缓存属性。我假设LoadAssetAtPath
将从磁盘加载一个新的实例是错误的,它返回已经在编辑器内存中的版本,这意味着缓存的值不会像新的加载一样失效。
我使用的解决方案是使用#ifdef UNITY_EDITOR
在编辑器中运行时永远不会缓存。