UnityPlayer.UnitySendMessage
是一个 void
函数,不返回任何值。请看下面的 UnitySendMessageExtension
函数实现。它类似于 turnipinindia 的答案,但它返回一个值。它只返回一个 string
,所以你需要将该字符串转换为你正在使用的变量类型。
Java:
public final class MyPlugin
{
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;
}
void receiveResult(string value)
{
result = "";
result = value;
}
}
C#:
class TestScript: MonoBehaviour
{
void sendResultToJava(float value)
{
using(AndroidJavaClass javaPlugin = new AndroidJavaClass("com.company.product.MyPlugin"))
{
AndroidJavaObject pluginInstance = javaPlugin.CallStatic("instance");
pluginInstance.Call("receiveResult",value.ToString());
}
}
void testFunction(string key)
{
float value = PlayerPrefs.GetFloat(key)
sendResultToJava(value);
}
}
Java中的用法:
String str = UnitySendMessageExtension("ProfileLoad", "testFunction","highScore")
这将适用于任何 C# 函数。只需确保您在 C# 函数结尾处调用 sendResultToJava
函数,就像我们在 testFunction
函数中所做的那样,如果您希望它返回值。
getTest
函数改为void
类型,并作为void
函数调用。如果可以,请告诉我是否有效。 - Programmer