Intégration d’Unity3d avec Android

Je dois créer une application Android composée de parties écrites sur Unity3d (animation, etc.) et sur AndroidSDK (par androidSDK, j’entends peu d’activités écrites en Java, manifeste et ressources)

En fait, j’ai déjà ces parties (Au moins, les simulacres sont prêts =)) Et je ne peux pas comprendre comment communiquer entre eux.

J’ai lu beaucoup d’articles sur l’intégration d’unity3d android (principalement des choses appelées “plugins“) et je n’ai pas compris comment fonctionne ce staff = (La principale chose que j’ai comprise (à l’exception des références officielles à ce sujet) est cette documentation sur les plugins est très pauvre … =)

La seule façon de communiquer que je peux comprendre consiste à créer une intention (diffusion) à partir du script unity3d (en utilisant AndroidJavaClass et AndroidJavaObject) afin que mon activité (écrite en Java) puisse la gérer. Mais quelque chose me dit que ce n’est pas la meilleure solution …

Ce que je lis à propos du problème, c’est que je dois utiliser JNI (qui est l’interface native de Java – POURQUOI?!? – pourquoi dois-je utiliser du code natif?)

Dois-je créer un code de niveau intermédiaire sur java dont l’objective est de communiquer avec mon activité java, de le comstackr à l’aide d’AndroidNDK et d’inclure dans mon projet Unity3d en tant que plug-in? Comment puis-je écrire cette couche intermédiaire? Dois-je utiliser UnityPlayer au lieu de “Activity” comme classe de base et pourquoi?

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

Il existe un excellent tutoriel sur l’ exécution d’Unity dans Android Views . Une fois que vous obtenez cela opérationnel, vous pouvez commencer à intégrer des scènes facilement n’importe où dans votre application.

Lorsque vous devez appeler l’application Java Android d’Unity, vous pouvez append ce code:

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

Et puis, vous pouvez appeler n’importe quelle méthode de votre activité via l’activité AndroidJavaObject. Quelque chose comme ça:

 activity.Call("yourFunctionName", parameters); 

Pour supporter complètement Android, vous n’avez pas besoin de créer du code intermédiaire sur Java.

Au lieu de cela, vous devriez:

  1. Créez un projet Lib sur le SDK Android.
  2. Créer une activité principale étend UnityPlayerActivity
  3. Créez d’autres activités dont vous avez besoin et ajoutez-les à Manifest.
  4. Créer une ressource, une mise en page…
  5. Exportez vers JAR et ajoutez-le dans Unity en copiant tous les fichiers de ressources JAR dans le dossier Assets / Plugins / Android.

Cette méthode est utile pour les notifications Push en écriture, la facturation d’applications, etc.

# De référence ici: http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html (-> Extension du code Java UnityPlayerActivity)

Et en outre, en utilisant le code ci-dessous:

 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayer.GetStatic("currentActivity"); activity.Call("yourFunctionName", parameters); 

Vous pouvez faire la plupart des choses magiques avec Android sur Unity

Note *: yourFunctionName doit être implémenté dans votre activité principale qui s’étend de UnityPlayerActivity (Regardez l’étape 2)

Cordialement,