调用Unity C#方法,返回Android / Java中的值

时间:2014-08-22 15:39:15

标签: android plugins unity3d return-value

我正在为Unity开发一个Android插件,我想知道Android代码中是否有一种方法可以调用一个返回值并获得此值的Unity C#方法。

当然这不起作用,但有一种方法,提示,技巧可以达到这样的目的:

String myReturnedString = UnityPlayer.UnitySendMessage("MyGameObject", 
                          "ReturnThisString","hello");

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

一种方法是让Unity程序中的方法通过Android应用程序中的方法与您的Android应用程序通信,方法是在Unity类中使用 AndroidJavaObject.Call

e.g。 您在Android应用程序中使用此方法。

<强> AndroidActivity.java

String stringFromUnity = "";

public void setStringFromUnity(String input){
    stringFromUnity = input;
}

然后在Unity脚本中(我正在使用C#)。

<强> UnityScript.cs

// Get the UnityPlayer class
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

// Get the current activity
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

// Call the setStringFromUnity method from Android Activity
activity.Call("setStringFromUnity", "Here is a string for you, Android");

或者我们可以使用 AndroidJavaObject.Set 方法直接设置String。

// Set the String directly provided the String is public
activity.Set<string>("stringFromUnity", "I set your String directly, hah!");

希望这有帮助。

供参考,您可以搜索适用于Android的&#34; Unity插件&#34;或者看看这个link上的Unity文档。

答案 1 :(得分:1)

在Android中:

int Times_Called;
public  int Get_Times_Called()
{
   Times_Called += 1;
   return  Times_Called;
}

在Unity中

 AndroidJavaClass Java = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
 AndroidJavaObject AndroidActivity = Java.GetStatic<AndroidJavaObject>("currentActivity");
 int Times_Called = AndroidActivity.Call<int>("Get_Times_Called");
        Debug.Log("Get_Times_Called: " + Times_Called);

答案 2 :(得分:0)

首先,我们在UnityPlayerActivity中创建一个“反向”方法

UnityPlayerActivity.java

public class UnityPlayerActivity extends Activity {
    ...

    public String reverse(String str) {
        return new StringBuilder(str).reverse().toString();
    }
    ...
}

然后我们在Unity中的某个位置(例如Monobehaviour)调用下一个块:

private static void CallAndroidMethod()
{
    var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    var currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    var args = new object[1];
    args[0] = "Hello World!";
    var reversed = currentActivity.Call<string>("reverse", args);
    Debug.Log($"Reversed: {reversed}");
}

最后,检查日志(例如,在AndroidStudio中):

I/Unity: Reversed: !dlroW olleH