如何在Unity / Mac中重置或重新导入插件?

时间:2019-01-02 23:26:41

标签: xcode macos unity3d unity3d-native-plugins

使用本地低级插件..Mac版本获取Unity项目。

enter image description here

在Xcode插件项目中进行少量更改,然后构建。

您现在在Unity项目中有了新的插件库。

如果再次“构建”,当然,最终的Mac应用程序现在将包含新库-没问题。

但是.....

如果您在编辑器中点击播放

它没有在库中获取更改。

事实上,它似乎是:

每次在Unity中更改库时,必须重新启动Unity!

一切都已尝试过,“重新导入所有资产”,AssetDatabase.Refresh,重命名等。看来您 从字面上必须 重新启动Unity。

这是怎么回事?


有关此的更多信息:

似乎无法卸载mac共享库/捆绑软件。文章:

https://docstore.mik.ua/orelly/unix3/mac/ch05_03.htm

显然,此问题已在10.5中修复:

https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dlclose.3.html

也许Unity现在可以解决这个问题。按照他们通常的节奏,它应该在2035年左右的任何时候发生。

1 个答案:

答案 0 :(得分:4)

可惜的是,您对此无能为力。

根据.net的DLL处理DLL,除非关闭应用程序域,否则不能单独卸载DLL。当Unity拾取对DLL所做的更改时,旧版本将保留在内存中,并在运行时在编辑器中使用。您可以通过在编辑器中删除本机插件来执行此操作,以使其“有趣”。确认要删除文件。该文件将从检查器中消失。但是,如果右键单击该文件夹并刷新(ctrl + r),您将看到文件已重建(在单击“全部重新导入”时也会发生此情况,因为尽管统一重启,但应用程序域未关闭)。

在构建应用程序时,它将使用本地存储的文件,而不是内存存储的文件。因此,插件将在构建中进行更新。

  

如果不卸载包含该程序集的所有应用程序域,则无法卸载该程序集。即使程序集超出范围,实际的程序集文件也将保持加载状态,直到包含该程序集的所有应用程序域都被卸载。

source

这已经有一段时间了,人们已经尝试过变通和/或修复,但是据我所知,现在存在的“变通”仅适用于Windows。这里是一些有关此讨论的链接。

我想可以完成的工作是编写一个包装器,该包装器在编辑了dll后会自动重启Unity。尽管这不能解决问题,但它至少会使它少一些麻烦。