Как вы перезагружаете или повторно импортируете плагины в Unity / Mac? - PullRequest
0 голосов
/ 03 января 2019

Получите проект Unity с собственным низкоуровневым плагином. Версия для Mac.

enter image description here

Сделайте небольшое изменение в проекте плагина Xcode,и сборка.

Теперь у вас есть новая библиотека плагинов в проекте Unity.

Если вы снова «соберете», конечно, в конечном приложении Mac теперь будет новая библиотека - нет проблем.

Однако .....

если вы нажали , нажмите Play в редакторе ,

, он не запишет изменения в библиотеке.

На самом деле это выглядит так:

Каждый раз, когда вы меняете библиотеку в 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 голосов
/ 03 января 2019

К сожалению, все сводится к тому, что вы ничего не можете с этим поделать.

В соответствии с DLL-обработкой .net DLL не могут быть выгружены по отдельности без закрытия домена приложения.И пока Unity отслеживает изменения, внесенные в DLL, старая версия сохраняется в памяти и используется во время выполнения в редакторе.«Забавно», что вы можете сделать, чтобы увидеть это в действии, удалив родной плагин из редактора.Подтвердите, что вы хотите удалить файл.Файл исчезнет из инспектора.Однако, если вы щелкнете правой кнопкой мыши по папке и обновите (ctrl + r), вы увидите, что файл восстанавливается (это также происходит при нажатии «re-import all», поскольку домен приложения не закрыт, несмотря на перезапуск единства).

Однако при создании приложения оно будет использовать локально сохраненный файл, а не файл, сохраненный в памяти.Следовательно, плагин обновляется при сборке.

Невозможно выгрузить отдельную сборку, не выгружая все домены приложений, которые ее содержат.Даже если сборка выходит из области видимости, фактический файл сборки будет оставаться загруженным до тех пор, пока не будут выгружены все домены приложения, которые его содержат.

source

Это имеетВ течение некоторого времени это была проблема, и люди предпринимали попытки обойти и / или исправить ошибки, но, насколько мне известно, «обходные пути», которые существуют сейчас, предназначены только для окон.вот несколько ссылок на обсуждения по этому поводу.

Полагаю, что можно сделать, это написать оболочку, которая автоматически перезапускает Unity, когда dll отредактирована ... Хотя это не решит проблему, по крайней мере, сделает ее несколькоменьше хлопот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...