Интеграция Unity3d с Android - PullRequest
       20

Интеграция Unity3d с Android

47 голосов
/ 13 октября 2011

Мне нужно создать приложение для Android, которое состоит из частей, написанных на Unity3d (анимация и т. Д.) И на AndroidSDK (под androidSDK я имею в виду несколько действий, написанных на Java, манифесте и ресурсах)

На самом деле яуже есть эти части (по крайней мере, mocks готовы =)) И я не могу понять, как общаться между ними.

Я прочитал много статей об интеграции с Unity3D Android (в основном о так называемых "плагины ") и не смог понять, как работает этот персонал = (Главное, что я понял (все, кроме официальных рефери, писали об этом), это то, что документация о плагинах очень плохая ... =)

Единственный способпередать, что я могу понять, это сделать намерение (трансляцию) из скрипта unity3d (используя AndroidJavaClass и AndroidJavaObject), чтобы моя деятельность (написанная на java) могла справиться с этим.Но что-то подсказывает мне, что это не лучшее решение ...

Что я читал о проблеме, так это то, что мне нужно использовать JNI (который является нативным Java-интерфейсом - ПОЧЕМУ?!? - зачем мне использовать нативныйкод?)

Нужно ли мне создавать какой-нибудь код среднего уровня на Java, цель которого состоит в том, чтобы общаться с моей деятельностью на Java, компилировать ее с помощью AndroidNDK и включать в мой проект Unity3d в качестве плагина?Как я могу написать этот средний слой, чем?Нужно ли использовать UnityPlayer вместо «Activity» в качестве базового класса и почему?

Ответы [ 2 ]

36 голосов
/ 25 октября 2011

<s>Here is a tutorial on the basics of <a href="http://unity3d.com/support/documentation/Manual/Android-Integrating%20Unity%20With%20Eclipse.html" rel="noreferrer">running Unity inside of a normal Android app</a>.</s>

Существует отличный учебник по , запускающему Unity внутри Android Views .Как только вы это запустите, вы сможете легко встраивать сцены в любое место вашего приложения.

Когда вам нужно вызвать приложение Java Android из Unity, вы можете добавить этот код:

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

И тогда вы можете вызывать любой метод, который вы хотите использовать в своей активности, через активность AndroidJavaObject.Как то так:

activity.Call("yourFunctionName", parameters);
7 голосов
/ 27 марта 2014

Для полной поддержки на Android вам не нужно создавать код среднего уровня на Java.

Вместо этого вы должны:

  1. Создание проекта Lib на Android SDK.
  2. Создать 1 основное задание расширяет UnityPlayerActivity
  3. Создайте другие необходимые вам действия и добавьте их в манифест.
  4. Создание ресурса, макет…
  5. Экспорт в JAR и добавление его в Unity путем копирования всего JAR, файла ресурсов в папку Assets / Plugins / Android.

Этот метод полезен для написания push-уведомлений, для выставления счетов за приложения и т. Д.

Ref # здесь: http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html (-> Расширение кода Java UnityPlayerActivity)

И кроме того, с помощью кода ниже:

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
activity.Call("yourFunctionName", parameters);

Вы можете делать большинство волшебных вещей с Android на Unity

Примечание *: yourFunctionName должно быть реализовано внутри вашей основной деятельности, которая выходит из UnityPlayerActivity (см. Шаг 2)

С уважением,

...