Unity не добавляет ссылку на управляемую сборку, если она не помечена как для всех платформ

У меня есть собственный плагин Unity со следующей структурой:

  • Plugins/Android/Foo.jar // Нативная библиотека Android
  • Plugins/Android/Foo.Android.dll // Управляемая оболочка Unity, позволяющая получить доступ к собственной подпрограмме Android (отмечена только для Android)
  • Plugins/iOS/libFoo.a // Нативная библиотека iOS
  • Plugins/iOS/Foo.iOS.dll // Управляемая оболочка Unity, позволяющая получить доступ к собственной процедуре iOS (отмечена только для iOS)

Когда я выбираю платформу Android или iOS и открываю свой проект Unity в MonoDevelop, он не добавляет ссылку на Foo.Android.dll. Такая же ситуация с iOS. Также Unity Editor Console содержит ошибку о нессылочных классах, используемых в моем коде Unity вне плагина.

Assets/MainScript.cs(3,11): error CS0234: The type or namespace nameBar' не существует в пространстве имен Foo'. Are you missing an assembly reference?

Если изменить настройку платформы Foo.iOS.dll/Foo.Android.dll на Any Platform перед открытием MonoDevelop под iOS/Android соответственно, все будет работать как положено.

Когда я создаю проект, он успешно создается как для iOS, так и для Android.

Где мне нужно разместить мои управляемые библиотеки или какие настройки я должен использовать, чтобы заставить Unity добавить соответствующие библиотеки в качестве ссылки при открытии проекта MonoDevelop?

Редактор Unity 5.2.0f3, OS X Yosemite 10.10.5 (14F27)


person Roman Mikhailov    schedule 01.10.2015    source источник


Ответы (1)


Одно из возможных решений:

Редактор Unity включает только библиотеки, помеченные как для Editor, чем проблема решена добавлением новой библиотеки-заглушки в Plugins\X86\Foo.Editor.dll с выбранной только целевой Editor платформой.

После этого Unity добавляет ссылку на заглушку Plugins\X86\Foo.Editor.dll при открытии проекта Mono Develop, но при сборке использует фактические библиотеки, зависящие от платформы.

person Roman Mikhailov    schedule 02.10.2015