Интеграция Unity3d с Android
Мне нужно создать приложение для Android, которое состоит из частей, написанных на Unity3d (анимация и т.д.) и на AndroidSDK (по androidSDK я имею в виду несколько действий, написанных в Java, манифесте и ресурсах)
На самом деле у меня уже есть эти части (по крайней мере, mocks ready =)) И я не могу понять, как общаться между ними.
Я прочитал много статей о интеграции Single3d android (в основном о вещах, называемых "плагинами" ), и не смог понять, как работает этот персонал = (Главное, что я понял (все, кроме официальных ссылок, писали об этом), состоит в том, что документация о плагинах очень плохая... =)
Единственный способ общения, который я могу понять, - это сделать намерение (трансляцию) с единства3d script (используя AndroidJavaClass и AndroidJavaObject), поэтому моя деятельность (написанная в java) может справиться с этим. Но что-то говорит мне, что это не лучшее решение...
Что я читал о проблеме, так это то, что мне нужно использовать JNI (который является родным интерфейсом java - ПОЧЕМУ?!? - зачем мне нужен собственный код?)
Нужно ли мне создать какой-то код среднего уровня в java, целью которого является общение с моей java-активностью, компиляция его с помощью AndroidNDK и включение в мой проект Unity3d в качестве плагина? Как я могу написать этот средний слой? Нужно ли использовать UnityPlayer вместо "Activity" в качестве базового класса и почему?
Ответы
Ответ 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.
Вместо этого вы должны:
- Создайте проект Lib на Android SDK.
- Создание 1 основной активности расширяет UnityPlayerActivity
- Создайте другие действия, которые вам нужны, и добавьте их в манифест.
- Создать ресурс, макет...
- Экспортируйте в 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)
С Уважением,