Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

activity.Call("yourFunctionName", parameters);

Ответ 2

Для полной поддержки на 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)

С Уважением,