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

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

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

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

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

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

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

3 ответа

Решение

Here is a tutorial on the basics of running Unity inside of a normal Android app.

Существует отличный учебник по запуску 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);

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

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

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

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

Ссылка # здесь: 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)

С Уважением,

В настоящее время unity3D в 2020 году вообще не нужен Android SDK. вы можете просто щелкнуть файл -> настройка сборки -> переключить платформу -> построить.

и вы можете создать свое приложение для Android.

Другие вопросы по тегам