代码之家  ›  专栏  ›  技术社区  ›  Fattie

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

  •  1
  • Fattie  · 技术社区  · 6 年前

    获取带有本机低级插件的Unity项目。MAC版本。

    enter image description here

    在Xcode插件项目中做一个小的更改,然后构建。

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

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

    然而。。。。。

    如果你 在编辑器中点击播放 ,

    它不接受库中的更改。

    事实上,看起来:

    每次你改变一个图书馆的统一,你 必须 重新启动统一!

    已经尝试了所有操作,“重新导入所有资产”、AssetDatabase.Refresh、重命名等。您似乎 字面上必须 重新启动统一。

    这是怎么回事?


    有关此的详细信息:

    似乎无法卸载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

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Remy    6 年前

    可悲的是,归根结底你对此无能为力。

    根据.NET的dll,如果不关闭应用程序域,则无法单独卸载处理dll的dll。当Unity获取对DLL所做的更改时,旧版本保存在内存中,并在运行时在编辑器中使用。您可以通过从编辑器中删除本机插件来“有趣”地看到这一点。确认要删除文件。这个文件将不受检查员的监督。但是,如果右键单击文件夹并刷新(ctrl+r),则会看到文件被重建(当单击“全部重新导入”时也会发生这种情况,因为应用程序域没有关闭,尽管Unity正在重新启动)。

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

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

    source

    一段时间以来,这一直是一个问题,人们试图解决问题和/或修复问题,但据我所知,目前存在的“解决问题”只适用于Windows。以下是一些链接,可供讨论。

    我想应该是 能够 完成是写一个包装,当DLL被编辑时自动重新启动Unity…虽然这不能解决这个问题,但至少可以减少一些麻烦。