Plugin para Android UnitySendMessage Never Called

Esto funcionaba hace unas semanas, pero ahora he notado que mi mensaje OnReward ya no se llama desde mi plugin personalizado.

En mi clase rewardcenter.cs llamo a la clase plugin para establecer el listener al objeto gameObject al que se adjunta este script (en este caso de ejemplo es GameObject ):

 public class rewardcenter : MonoBehaviour { int counter = 0; void Start () { OnReward("85"); } // Update is called once per frame void Update () { if (counter == 20) { #if UNITY_ANDROID PluginClass.SetRewardListener(gameObject.name); Debug.Log("Adding Android Reward Listener: " + gameObject.name); #endif } counter++; } void OnReward(string quantity) { Debug.Log("OnReward: " + quantity); } } 

En el archivo PluginClass.cs puede ver cómo llamo a la llamada setUnityObjectName en la clase de complemento java para establecer el objeto de unidad en el pasado en la cadena de nombre de GameObject :

 private static AndroidJavaObject pluginClassInstance = null; private static AndroidJavaObject activityContext = null; // pass in the GameObject that implements the OnReward method public static void SetRewardListener(string gameObjName) { if (activityContext == null) { using (AndroidJavaClass activityClass = new AndroidJavaClass ("com.unity3d.player.UnityPlayer")) { activityContext = activityClass.GetStatic<AndroidJavaObject> ("currentActivity"); } } using (AndroidJavaClass pluginClass = new AndroidJavaClass ("pluginclass.com.PluginClass")) { if (pluginClass != null) { pluginClassInstance = pluginClass.CallStatic<AndroidJavaObject> ("getInstance"); activityContext.Call ("runOnUiThread", new AndroidJavaRunnable (() => { pluginClassInstance.Call("setUnityObjectName", gameObjName); })); } } } 

En el java PluginClass mismo más adelante intentamos llamar a OnReward usando UnitySendMessage en nuestro objeto de juego:

  public void unityEarnedReward(String quantity) { Log.d(TAG, "unityEarnedReward: " + quantity); if (PluginClass.getInstance()._unityObjectName != null) { Log.d(TAG, "calling OnReward(" + quantity + ") on unityObject with name: " + PluginClass.getInstance()._unityObjectName); com.unity3d.player.UnityPlayer.UnitySendMessage(PluginClass.getInstance()._unityObjectName, "OnReward", quantity); } } 

Termino con una salida de registro en Android Studio de:

 calling OnReward(202) on unityObject with name: GameObject 

Pero nunca parece que en realidad se llame OnReward dentro del juego.

Sólo por las patadas He intentado llamar a OnReward cuando se inicia el guión, termina con una salida de:

 OnReward: 85 

Así que sé que funciona e imprime a la consola cuando se ejecuta.

¿Alguna idea de dónde me equivoco? Lo extraño es que esto funcionó hace unas semanas, pero ahora el método OnReward no se ejecuta.

EDITAR:

También traté de ejecutarlo sin la declaración de clase específica como esta sin suerte:

 UnityPlayer.UnitySendMessage(PluginClass.getInstance()._unityObjectName, "OnReward", quantity); 

También cambié el nombre de mi gameObject para ser MyCustomPlugin pero mientras que el código androide activado no parece que el método OnReward fue desencadenado en el script vinculado a MyCustomPlugin .

Captura de pantalla de script: Introduzca aquí la descripción de la imagen

Cuando ejecuto este código:

 void Update () { var unityPlayer = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); unityPlayer.CallStatic ("UnitySendMessage", gameObject.name, "OnReward", "185"); OnReward ("86"); } 

Termino con dos mensajes de Log:

 04-14 10:47:47.085 10341-10354/? I/Unity: OnReward: 86 (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 04-14 10:47:47.095 10341-10354/? I/Unity: OnReward: 185 (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 

Parece que el problema fundamental es que porque tengo una actividad separada, hace una pausa a la UnityActivity que a su vez hace una pausa a la Unidad.

Por lo tanto, Unity no puede recibir el UnitySendMessage cuando estaba tratando de enviarlo.

Para evitar esto implementé una forma de llamarla en mi método onStop de mi Actividad. En este momento, Unity ya no está pausado y puede recibir el mensaje.

  • Unidad ui máscara no funciona en el dispositivo de píxeles de google
  • Error: No se puede crear FMOD :: Instancia de sonido para recurso sharedassets0.resource al dividir el binario de la aplicación en Unity
  • Carga del modelo AR a través del toque de botón en Android
  • ¿Cómo puede un juego creado en Unity funcionar en un dispositivo Android?
  • Utilizando el giroscopio Android en Unity3d, ¿cómo puedo configurar la rotación inicial de la cámara con la rotación inicial del dispositivo móvil?
  • Obtener un puntero JNIEnv válido
  • Consola para programadores de Android: una huella dactilar errónea tras la creación de la versión con Android Studio
  • Demasiadas referencias de campo: 70613; Max es 65536
  • Unity3D para iOS y Android: Multijugador (conexión Bluetooth)
  • Iniciar el servicio android desde el código Unity3D
  • Exportación y ejecución del proyecto Unity3D a Android Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.