如何使用 UnityPlayer.UnitySendMessage 调用方法并返回其值 [英] How to call method and return its value with UnityPlayer.UnitySendMessage
问题描述
如何从 Java 调用此 C# 方法然后返回字符串值?
public string getTest() { return "test";}
这是我试过的:
String str = UnityPlayer.UnitySendMessage("ProfileSave", "getTest","");
我收到以下错误
<块引用>String str=UnityPlayer.UnitySendMessage("ProfileSave", "getTest","");^要求:字符串发现:无效
UnityPlayer.UnitySendMessage
是一个 void
函数,不返回值.看看下面的 UnitySendMessageExtension
函数实现.它类似于 turnipinindia 的 答案,但它返回一个值.它只返回一个 string
,因此您必须将该字符串转换为您正在使用的任何变量类型.
Java:
公共final类MyPlugin{//使类成为静态变量,以便将回调函数发送到此类的一个实例.公共静态 MyPlugin 测试实例;公共静态 MyPlugin 实例(){如果(测试实例 == 空){testInstance = 新的 MyPlugin();}返回测试实例;}字符串结果 = "";公共字符串 UnitySendMessageExtension(string gameObject, string functionName, string funcParam){UnityPlayer.UnitySendMessage(gameObject, functionName, funcParam);字符串 tempResult = 结果;返回临时结果;}//从C#接收结果并将其保存到结果变量中无效接收结果(字符串值){result = "";//清除旧数据结果 = 值;//获取新的}}
C#:
class TestScript: MonoBehaviour{//将PlayerPrefs中的数据发送到Java中的receiveResult函数void sendResultToJava(浮点值){using(AndroidJavaClass javaPlugin = new AndroidJavaClass("com.company.product.MyPlugin")){AndroidJavaObject pluginInstance = javaPlugin.CallStatic("instance");pluginInstance.Call("receiveResult",value.ToString());}}//从Java调用以获取保存的PlayerPrefsvoid testFunction(字符串键){float value = PlayerPrefs.GetFloat(key)//从key中获取保存的值sendResultToJava(value);//将值发送给Java}}
Java 中的用法:
String str = UnitySendMessageExtension("ProfileLoad", "testFunction","highScore");
这适用于任何 C# 函数.只要确保在 C# 函数的末尾调用 sendResultToJava
函数,就像我们在 testFunction
函数中所做的那样,如果您希望它返回价值.
How can I call this C# method from Java then return the string value?
public string getTest () { return "test"; }
This is what I've tried:
String str = UnityPlayer.UnitySendMessage("ProfileSave", "getTest","");
I am getting the below error
String str=UnityPlayer.UnitySendMessage("ProfileSave", "getTest",""); ^ required: String found: void
UnityPlayer.UnitySendMessage
is a void
function and does not return a value. Take a look at the UnitySendMessageExtension
function implementation below. It is similar to turnipinindia's answer but it returns a value. It only returns a string
so you have to convert that string to whatever variable type you are working with.
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
}
}
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
}
}
Usage from Java:
String str = UnitySendMessageExtension("ProfileLoad", "testFunction","highScore");
This will work with any C# function. Just make sure that you call sendResultToJava
function at the end of the C# function like we did in the testFunction
function, if you want it to return value.
这篇关于如何使用 UnityPlayer.UnitySendMessage 调用方法并返回其值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!