我正在为Unity开发一个Android插件,我想知道Android代码中是否有一种方法可以调用一个返回值并获得此值的Unity C#方法。
当然这不起作用,但有一种方法,提示,技巧可以达到这样的目的:
String myReturnedString = UnityPlayer.UnitySendMessage("MyGameObject",
"ReturnThisString","hello");
非常感谢你的帮助。
答案 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