如何从Java调用此C#方法然后返回字符串值?
public string getTest () { return "test"; }
这是我尝试过的:
String str = UnityPlayer.UnitySendMessage("ProfileSave", "getTest","");
我收到以下错误
String str=UnityPlayer.UnitySendMessage("ProfileSave", "getTest",""); ^ required: String found: void
答案 0 :(得分:4)
UnityPlayer.UnitySendMessage
是void
函数,不返回值。看看下面的UnitySendMessageExtension
函数实现。它与turnipinindia's答案类似,但它返回一个值。它只返回string
,因此您必须将该字符串转换为您正在使用的任何变量类型。
<强>爪哇强>:
public final class MyPlugin
{
//Make class static variable so that the callback function is sent to one instance of this class.
public static MyPlugin testInstance;
public static MyPlugin instance()
{
if(testInstance == null)
{
testInstance = new MyPlugin();
}
return testInstance;
}
string result = "";
public string UnitySendMessageExtension(string gameObject, string functionName, string funcParam)
{
UnityPlayer.UnitySendMessage(gameObject, functionName, funcParam);
string tempResult = result;
return tempResult;
}
//Receives result from C# and saves it to result variable
void receiveResult(string value)
{
result = "";//Clear old data
result = value; //Get new one
}
}
<强> C#强>:
class TestScript: MonoBehaviour
{
//Sends the data from PlayerPrefs to the receiveResult function in Java
void sendResultToJava(float value)
{
using(AndroidJavaClass javaPlugin = new AndroidJavaClass("com.company.product.MyPlugin"))
{
AndroidJavaObject pluginInstance = javaPlugin.CallStatic("instance");
pluginInstance.Call("receiveResult",value.ToString());
}
}
//Called from Java to get the saved PlayerPrefs
void testFunction(string key)
{
float value = PlayerPrefs.GetFloat(key) //Get the saved value from key
sendResultToJava(value); //Send the value to Java
}
}
Java的用法:
String str = UnitySendMessageExtension("ProfileLoad", "testFunction","highScore");
这适用于任何 C#功能。如果您希望它返回值,请确保在{em> C#函数末尾调用sendResultToJava
函数,就像我们在testFunction
函数中所做的那样。
答案 1 :(得分:1)
UnitySendMessage无法向Android返回任何内容。
你可以这样做的另一种方法是在Android中实现另一种方法,Unity会在请求时将值传回。
例如,首先在android中请求数据:
UnityPlayer.UnitySendMessage("ProfileSave", "getData");
在统一中,你有一个方法接收该请求并将数据发送回android:
public void getData () {
string dataString = "exampleData";
//code to send data back to ReceiveData method in Android, something like this probably:
AndroidJavaClass myAndroidClass = new AndroidJavaClass ("com.myCompany.myApplication.myClass");
myAndroidClass.CallStatic ("ReceiveData",dataString);
}
然后在android中你有一个等待接收数据的方法(很可能是静态方法):
public static void ReceiveData(string data){
//do stuff with data
}