web-dev-qa-db-fra.com

Intégration Unity3d avec android

Je dois créer une Android qui se compose de parties écrites sur Unity3d (animation et ainsi de suite) et sur AndroidSDK (par androidSDK, je veux dire quelques activités écrites en Java, manifeste et ressources)

En fait, j'ai déjà ces pièces (au moins les maquettes sont prêtes =)) Et je ne sais pas comment communiquer entre elles.

J'ai lu beaucoup d'articles sur Unity3d Android (principalement sur des choses appelées "plugins") et je n'ai pas compris comment fonctionne ce personnel = (La principale chose que j'ai comprise (tout le monde sauf les références officielles) écrit à ce sujet) est que la documentation sur les plugins est très pauvre ... =)

La seule façon de communiquer que je peux comprendre est de créer une intention (diffusion) à partir du script Unity3d (en utilisant AndroidJavaClass et AndroidJavaObject) pour 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 j'ai lu sur le problème, c'est que je dois utiliser JNI (qui est Java - POURQUOI?!? - pourquoi dois-je utiliser du code natif?)

Dois-je créer du code de niveau intermédiaire sur Java dans le but de communiquer avec mon Java, le compiler à l'aide d'AndroidNDK et l'inclure dans mon projet Unity3d comme plugin? Comment puis-je écrire cette couche intermédiaire? Dois-je utiliser UnityPlayer au lieu de "Activity" comme classe de base et pourquoi?

47
leshka

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

Il existe un excellent didacticiel sur en exécutant Unity à l'intérieur de Android Views . Une fois que vous avez installé et exécuté vous pouvez commencer à intégrer des scènes facilement n'importe où dans votre application.

Lorsque vous devez appeler l'application Java Android de Unity, vous pouvez ajouter ce code:

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("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);
36
spatulamania

Pour une prise en charge complète sur Android, vous n'avez pas besoin de créer du code de niveau intermédiaire sur Java.

Au lieu de cela, vous devez:

  1. Créez un projet Lib sur Android SDK.
  2. Créer 1 activité principale étend UnityPlayerActivity
  3. Créez d'autres activités dont vous avez besoin et ajoutez-les au manifeste.
  4. Créer ressource, 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 rédiger une notification Push, dans la facturation d'une application, etc.

Ref # ici: http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html (-> Extension de l'UnityPlayerActivity Java Code)

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

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

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

Remarque *: votreFunctionName doit être implémenté à l'intérieur de votre activité principale qui s'étend de UnityPlayerActivity (Regardez à l'étape 2)

Cordialement,

7
Frank Nguyen