gpt4 book ai didi

unity-game-engine - 强制 Unity 将预制件保存到磁盘

转载 作者:行者123 更新时间:2023-12-02 14:33:13 24 4
gpt4 key购买 nike

使用 Unity 5.4.2。

我创建了一个编辑器脚本,当您按下导出按钮时,它会实现一些预制数据的导出器。它递归地在自己的目录下查找与某种类型匹配的所有预制件文件,并加载这些预制件,以便可以以自定义方式导出它们。

我遇到的问题是磁盘上的预制件加载了

var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file);

与编辑器中的当前状态不匹配。也就是说,如果您在编辑器中修改了一些预制件数据,它实际上不会保存到磁盘。请注意,这不需要将任何对象添加到场景中,我只是直接从附加到预制件的组件中导出数据。

我尝试将 AssetDatabase.SaveAssets(); 添加到导出函数的顶部,该函数应该保存所有资源,但是当我编辑值然后记录从加载的值时预制件,它们不是最新的。到目前为止,我发现有两种(非编程)方法可以使我的导出器能够看到修改后的数据:

  • 如果我退出 Unity 并重新启动它,预制件似乎会在此时保存,并且导出器会看到更新的数据。
  • 如果我播放并停止任何场景,然后导出,导出器可以看到更新的数据,但奇怪的是(根据 git status)它们尚未写入磁盘,所以我怀疑 LoadAssetAtPath 实际上加载一些在“播放”时更新的缓存版本。

有没有办法强制 Unity 将所有内容保存到磁盘,以便我的导出器可以使用最新的值进行操作?

最佳答案

以下应该可以解决问题

// 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

关于unity-game-engine - 强制 Unity 将预制件保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com