C# Android插件UnitySendMessage从未调用

C# Android插件UnitySendMessage从未调用,c#,android,unity3d,C#,Android,Unity3d,这在几周前还有效,但现在我注意到我的自定义插件不再调用我的OnReward消息 在我的rewardcenter.cs类中,我调用plugin类将侦听器设置为该脚本所连接的游戏对象(在本例中为gameObject): 在PluginClass.cs文件中,您可以看到我如何调用java插件类上的setUnityObjectName调用,将unity对象设置为传入的GameObject的名称字符串GameObject: public class rewardcenter : MonoBehaviour

这在几周前还有效,但现在我注意到我的自定义插件不再调用我的
OnReward
消息

在我的rewardcenter.cs类中,我调用plugin类将侦听器设置为该脚本所连接的游戏对象(在本例中为
gameObject
):

在PluginClass.cs文件中,您可以看到我如何调用java插件类上的
setUnityObjectName
调用,将unity对象设置为传入的GameObject的名称字符串
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);
    }
}
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);
            }));
        }
    }
}
我最终在Android Studio中获得了以下日志输出:

calling OnReward(202) on unityObject with name: GameObject
但它似乎从未在游戏中真正调用奖励

为了好玩,我试着在脚本启动时调用
OnReward
,结果是输出:

OnReward: 85
因此,我知道它可以工作,并在执行时打印到控制台

知道我哪里出错了吗?奇怪的是,这在几周前就奏效了,但现在没有执行
OnReward
方法

编辑:

我还尝试在没有特定类声明的情况下运行它,就像这样,但运气不佳:

UnityPlayer.UnitySendMessage(PluginClass.getInstance()._unityObjectName, "OnReward", quantity);
我还将我的游戏对象重命名为
MyCustomPlugin
,但当android代码触发时,似乎从未在链接到
MyCustomPlugin
的脚本上触发过
OnReward
方法

脚本截图:

当我运行此代码时:

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

        OnReward ("86"); 
    }
我最后得到两条日志消息:

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)

看起来根本的问题是,因为我有一个单独的活动,它暂停了UnityActivity,而UnityActivity反过来又暂停了Unity

因此,当我试图发送UnitySendMessage时,Unity无法接收它


为了解决这个问题,我在活动的
onStop
方法中实现了一种调用它的方法。此时Unity不再暂停,可以接收消息。

GameOjbect是否存在?也许你把它改名了。。。。您可以使用
TheoremReach.getInstance()。\u unityObjectName
上的
Log.d
进行验证。在Unity端,使用
GameObject.Find
来验证您发送的事件是否确实存在。是的,它们都存在。当我在Unity端执行此操作时,我会得到
GameObject
作为名称,当我在Android中执行
Log.d
时,我会得到相同的字符串。好的支票!游戏中是否有多个同名的“GameObject”对象?我觉得你的名字太普通了,你有没有试过把你的对象重命名为“MyCustomPlugin”之类的名字?好主意。我将其重命名为MyCustomPlugin,并在名为MyCustomPlugin的unityObject上调用了
OnReward(101),但实际的
OnReward
调用没有进行。我还验证了它在Unity端是正确的游戏对象:(当您登录时,您使用的是PluginClass.getInstance()。_unityObjectName,当您实际调用函数时,您使用的是TheoremReach.getInstance()).以上示例中的unityObjectName。可能是一个输入错误,但以防万一?Unity跳转到另一个活动可能不是什么好事,我会尽量避免跳转活动,可能会扩展UnityPlayerPractivity并在里面做事情。
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)