2016-07-05 2 views
1

Я новичок в Unity3D, и у меня есть некоторые проекты, уже выполненные с Java, которые необходимо включить в мой проект Unity3D.Unity3D с несколькими банками (android jar + pure java lib)

Я хочу добавить несколько банок в проект Unity3D, но похоже, что банки не имеют никакой зависимости между ними, когда они работают в проекте Unity.

Для этого

  • Я пытался добавить все банки, связанные с активами/Plugins/папке Android (Multiple некоторые чистые ява банку файлы в папку с Android баночку, чтобы вызвать методы баночки)

  • Я попытался сделать только один файл банки (создавая Android проекта со всеми баночками включены)

с этих 2 методами, я могу построить мой проект как на базе Android, но они показали ошибки, говорят, что связанных библиотек не существует

Есть ли способ использовать несколько библиотек jar в проекте Unity3D с зависимостью от других банок?

Другими словами, я хочу эту структуру

| Основной проект (единство) | --dependency -> | Jar lib 1 | --dependency -> | Jar lib 2 |

  • Jar Lib 1: Библиотека Мне нужно вызвать метод непосредственно
  • Jar Lib 2: библиотека, которая импровизировать 1 использует
+0

Я был бы склонен просто забыть об этом **. это просто не то, для чего единство. Вы делаете огромную боль без всякой выгоды. – Fattie

ответ

1

Есть ли способ, что я могу использовать несколько библиотеку баночки в Unity3D проект с зависимостью от других банок?

NO.

Если у вас много библиотек jar, которые зависят друг от друга, вы должны объединить их в один. Да, банки должны быть объединены в один, тогда вы можете создать мост, который Unity может использовать для доступа к ним.

Jar Lib 1: Библиотека Мне нужно вызвать метод непосредственно

Jar Lib 2: библиотека, которая импровизировать 1 использует

В этом случае, вы должны импортировать Lib 2 in Lib 1. Затем выполните функции в Lib 1, который вызывает функции в Jar Lib 2. Затем вы можете построить Lib 1 и Lib 2.

В Eclipse, Проекты ->Построить все. Затем экспортируйте их в один файл jar.Опять же, в Eclipse, Файл ->Экспорт ... ->Java ->JAR файл. Затем выберите обоих Libs, если они появятся. Используйте следующие настройки:

enter image description here

Java:

// Материал из Lib/Jar (Давайте предположим, что это код функции в нем)

public class Lib2{ 
    public static Lib2 instance = new Lib2(); 

    public double getRandomNumber() { 
     double advancedRandomNumber = 5; 
     return advancedRandomNumber; 
    } 
} 

// Материал из Lib/Jar (com.roxy.app) package (Позволяет assu мне это код функции в нем)

public class Lib1{ 
    public static Lib1 instance = new Lib1(); 

    public double getMagicRandomNumber() { 
     double advancedRandomNumber = 15; 
     return advancedRandomNumber; 
    } 

    //Bridge to access Stuff from jar 2 
    public double getExtraMagicRandomNumber() 
    { 
     return Lib2.instance.getRandomNumber(); 
    } 
} 

C#:

private AndroidJavaClass androidClass; 
    private AndroidJavaObject androidFunction; 

    #if UNITY_ANDROID 
     if (androidClass == null || androidFunction == null) 
     { 
      androidClass = new AndroidJavaClass("com.roxy.app.Lib1"); 
      androidFunction = androidClass.GetStatic<AndroidJavaObject>("instance"); 
     } 
    #endif 

Тогда вы можете вызвать getMagicRandomNumber() функцию из Lib1 с:

double adRand = androidFunction.Call<double>("getMagicRandomNumber"); 

И вызвать функцию из Lib2 из мостовая функция, выполненная в Lib1.

double adRand = androidFunction.Call<double>("getExtraMagicRandomNumber"); 

Всё. Это не сложно, но это может не скомпилировать, потому что я набрал его непосредственно в этом редакторе. Возможно, потребуется сделать небольшую модификацию.

Смежные вопросы