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?
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);
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ś:
- Utwórz projekt Lib na Android SDK.
- Utwórz 1 główne działanie rozszerza UnityPlayerActivity
- Utwórz inne działania, których potrzebujesz i dodaj je do manifestu.
- Create resource, layout ...
- 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,
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