use*_*589 7 android unity-game-engine unityscript unity5
如何从Java调用此C#方法然后返回字符串值?
public string getTest () { return "test"; }
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的:
String str = UnityPlayer.UnitySendMessage("ProfileSave", "getTest","");
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Run Code Online (Sandbox Code Playgroud)String str=UnityPlayer.UnitySendMessage("ProfileSave", "getTest",""); ^ required: String found: void
UnityPlayer.UnitySendMessage是一个void函数,不返回值。看一下UnitySendMessageExtension下面的函数实现。它类似于Turnipinindia的答案,但返回一个值。它仅返回a,string因此您必须将该字符串转换为正在使用的任何变量类型。
Java的:
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
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
来自Java的用法:
String str = UnitySendMessageExtension("ProfileLoad", "testFunction","highScore");
Run Code Online (Sandbox Code Playgroud)
这将与任何C#函数一起使用。如果您希望它返回值,只需确保像在函数中一样sendResultToJava在C#函数的末尾调用函数testFunction即可。
小智 2
UnitySendMessage 无法向 Android 返回任何内容。
实现此目的的一种方法是在 Android 中实现另一种方法,Unity 将在请求时将值传回给该方法。
例如,首先在 android 中请求数据:
UnityPlayer.UnitySendMessage("ProfileSave", "getData");
Run Code Online (Sandbox Code Playgroud)
在unity中,你有一个方法来接收该请求并将数据发送回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);
}
Run Code Online (Sandbox Code Playgroud)
然后在 android 中你有一个等待接收数据的方法(很可能是静态方法):
public static void ReceiveData(string data){
//do stuff with data
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7371 次 |
| 最近记录: |