Interaction entre Unity et Android (2) - méthodes d'interaction courantes

AndroidJavaClass/AndroidJavaObject est couramment utilisé pour implémenter C# pour appeler du code Java, et UnitySendMessage est couramment utilisé pour implémenter Java pour appeler du code C#.

【Exemple de code d'appel】

Le code Java est :

package com.test.addtest;

import com.unity3d.player.UnityPlayer;

public class JavaTestClass {
    public static int num;
    public static void Add(int a,int b)
    {
        int result = a+b;
        SendMessage(Integer.toString(result));
    }

    private static void SendMessage(final String info)
    {
        UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                UnityPlayer.UnitySendMessage("GameBase","U3dCallbackMessage",info);
            }
        });
    }

    public String name;
    public int Sub(int c)
    {
        return num-c;
    }
}

Le code C# est :

using UnityEngine;
using UnityEngine.UI;

public class TestCode : MonoBehaviour
{
    public Text text;

    public void Add()
    {
        using (AndroidJavaClass testClass = new AndroidJavaClass("com.test.addtest.JavaTestClass"))
        {
            testClass.CallStatic("Add", 3, 5);
            testClass.SetStatic<int>("num", 10);
            int num = testClass.GetStatic<int>("num");
            U3dCallbackMessage(num.ToString());
            using (AndroidJavaObject testObject = new AndroidJavaObject("com.test.addtest.JavaTestClass"))
            {
                testObject.Set<string>("name", "永恒之星");
                string name = testObject.Get<string>("name");
                U3dCallbackMessage(name);
                int result= testObject.Call<int>("Sub", 8);
                U3dCallbackMessage(result.ToString());
            }
        }
    }

    public void U3dCallbackMessage(string message)
    {
        text.text += message;
        text.text += " ";
    }
}

Le résultat est:

[Analyse du processus d'appel]

  1. Après avoir cliqué sur le bouton, la méthode Add est exécutée. Dans la méthode Add, une classe testClass est générée avec AndroidJavaClass. Le paramètre entrant est le nom du package + le nom de la classe (vous pouvez voir le code Java), qui est similaire à l'espace de noms + nom de classe en C#. De cette façon, nous obtenons la classe écrite en Java, mais en C #, nous avons directement la classe.
  2.  testClass.CallStatic("Add", 3, 5); Ceci appelle la méthode Add dans JavaTestClass. Add est une méthode statique, qui est appelée à l'aide de la méthode CallStatic d'AndroidJavaClass. Le premier paramètre est le nom de la méthode, et le suivant Les paramètres sont les paramètres de la méthode Add, si la méthode Add a trois paramètres, il doit évidemment y avoir trois paramètres après le nom de la méthode.
  3. Dans la méthode Add, la méthode UnityPlayer.UnitySendMessage est en fait appelée pour transmettre le résultat au côté C#. Elle comporte trois paramètres. Le premier paramètre est le nom du GameObject, le deuxième paramètre est le nom de la méthode et le troisième paramètre est le contenu du message. Chaque paramètre est de type chaîne (Quant à la raison pour laquelle la méthode RunOnUiThread est utilisée, elle sera expliquée dans l'article suivant. Vous pouvez d'abord penser qu'il s'agit d'un appel asynchrone, donc le résultat 8 est affiché à la fin)
  4. testClass.SetStatic<int>("num", 10) définit la valeur du champ de type int statique num dans le code Java sur 10, int num = testClass.GetStatic<int>("num") obtient le champ de type int dans le code Java La valeur de num, qui donne 10
  5. AndroidJavaObject testObject = new AndroidJavaObject("com.test.addtest.JavaTestClass") consiste à instancier une classe Java.
  6. testObject.Set<string>("name", "Eternal Star"); Définissez la valeur du nom de champ de type chaîne de l'objet instancié, string name = testObject.Get<string>("name") pour obtenir la valeur
  7.  int result= testObject.Call<int>("Sub", 8); est d'appeler la méthode Sub de l'objet instancié, qui a une valeur de retour de type int.
  8. Utiliser using consiste à appeler automatiquement la méthode Dispose de AndroidJavaClass et AndroidJavaObject

[ La différence entre AndroidJavaClass et AndroidJavaObject ]

Lors de l'utilisation, comprenez AndroidJavaClass comme une classe en C # et AndroidJavaObject comme un objet instancié de cette classe

【UnitySendMessage】

Pour que la méthode U3dCallbackMessage dans TestCode reçoive le message de déroulement de UnityPlayer.UnitySendMessage en Java, le script TestCode doit être suspendu au GameObject nommé GameBase. C'est la signification des deux premiers paramètres de UnityPlayer.UnitySendMessage.

[Comment générer du code Java]

Tout d'abord, vous devez installer Android Studio vous-même. Le code Java n'est pas très différent de C#. Il est facile à écrire et vous pouvez le comprendre en recherchant une grammaire peu claire.

Créer une EmptyActivity

Spécifiez PackageName, qui sera utilisé dans le code

Sélectionnez la structure de répertoire d'Android, faites un clic droit sur l'application et créez un nouveau module

 

 Choisissez la bibliothèque Android

 Sélectionnez Project, ouvrez le répertoire Unity, sous le chemin Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations, selon qu'il s'agit d'il2cpp ou d'emballage mono, continuez à sélectionner le mode débogage ou release, recherchez classes.jar dans le dossier Classes , et importez-le dans Java Sous le dossier libs du projet, cliquez avec le bouton droit de la souris et sélectionnez Ajouter en tant que bibliothèque. La méthode d'importation consiste à faire glisser le fichier directement ou à copier le fichier dans le chemin du dossier libs.

Cliquez avec le bouton droit sur addtest-> src-> main-> java-> com.test.addtest pour créer une nouvelle JavaClass et écrivez du code dans cette JavaClass

 Une fois le code écrit, cliquez sur Marquer le projet ou Reconstruire le projet

La construction est réussie sans signaler d'erreur. Cliquez avec le bouton droit sur les sorties et sélectionnez Afficher dans l'explorateur. Notez que le dossier de construction apparaît automatiquement après la construction et qu'il n'y a pas de dossier de ce type lorsque le projet vient d'être créé. Build ne signale généralement pas d'erreurs, mais si vous n'avez pas de chance, diverses erreurs seront signalées. Ces erreurs peuvent être facilement résolues en effectuant une recherche.

Décompressez le fichier arr, sélectionnez le fichier classes.jar et renommez-le avec le nom dont vous avez besoin. Cet article est nommé add

Mettez ce fichier dans l'unité, et le code C # peut appeler le code Java.

 

 Ensuite, vous pouvez créer un package Android et le tester sur l'émulateur.

【Erreurs possibles et solutions dans Build】

Semblait remplir. . .

Je suppose que tu aimes

Origine blog.csdn.net/enternalstar/article/details/130961339
conseillé
Classement