Integracja Unity3d z Androidem

Muszę stworzyć aplikację na Androida, która składa się z części napisanych na Unity3d (animacja i tak dalej) i na AndroidSDK (przez androidSDK mam na myśli kilka działań napisanych w Javie, manifest i zasobów)

W zasadzie już mam te części (przynajmniej są gotowe=)) i nie wiem jak się między nimi komunikować.

Przeczytałem wiele artykułów o Integracji unity3d android (głównie o rzeczach zwanych "wtyczkami") i nie zrozumiałem, jak ten personel works= (najważniejsze, co zrozumiałem (wszyscy o tym pisali exept official refs), to to, że dokumentacja dotycząca wtyczek jest bardzo słaba... =)

Jedynym sposobem komunikacji, który mogę zrozumieć, jest wykonanie intencji (broadcast) ze skryptu unity3d (za pomocą AndroidJavaClass i AndroidJavaObject), aby Moja aktywność (napisana w Javie) mogła sobie z tym poradzić. Ale coś mi mówi, że to nie jest najlepsze rozwiązanie...

To, co czytałem o problemie jest to, że muszę używać JNI (który jest Java native interfejs-dlaczego?!? - dlaczego muszę używać kodu natywnego?)

Czy muszę stworzyć jakiś kod średniego poziomu w Javie, który ma komunikować się z moją działalnością java, skompilować go za pomocą AndroidNDK i włączyć do mojego projektu Unity3d jako wtyczkę? Jak mogę napisać tę środkową warstwę niż? Czy muszę używać UnityPlayer zamiast "Activity" jako klasy bazowej i dlaczego?

Author: Lex Li, 2011-10-13

2 answers

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

Jest świetny tutorial o uruchamianiu Unity w widokach Androida . Po uruchomieniu aplikacji możesz łatwo rozpocząć osadzanie scen w dowolnym miejscu aplikacji.

Kiedy musisz zadzwonić do aplikacji Java Android z Unity, możesz dodać ten kod:

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

A następnie możesz wywołać dowolną metodę na swojej aktywności za pomocą Activity AndroidJavaObject. Coś takiego:

activity.Call("yourFunctionName", parameters);
 34
Author: spatulamania,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-22 03:41:49

Aby w pełni obsługiwać Androida, nie musisz tworzyć kodu średniego poziomu w Javie.

Zamiast tego powinieneś:

  1. Utwórz projekt Lib na Android SDK.
  2. Utwórz 1 główne działanie rozszerza UnityPlayerActivity
  3. Utwórz inne działania, których potrzebujesz i dodaj je do manifestu.
  4. Create resource, layout ...
  5. Eksportuj do JAR i dodaj go do Unity, kopiując wszystkie pliki JAR, resource do folderu Assets / Plugins / Android.

This way is pomocny przy pisaniu powiadomień Push, w rozliczeniach aplikacji itp ...

Ref # tutaj: http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html (- >rozszerzenie kodu Java UnityPlayerActivity)

Oraz dodatkowo, używając poniższego kodu:

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
activity.Call("yourFunctionName", parameters);
Możesz zrobić większość magicznych rzeczy z Androidem na Unity]}

Uwaga*: Twoja nazwa funkcji musi być zaimplementowana wewnątrz głównej aktywności, która rozciąga się od UnityPlayerActivity (spójrz na krok 2)

Pozdrawiam,

 7
Author: Frank Nguyen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 02:15:33