这是非常基本的,但是我没有从Unity官方文档和YouTube视频教程中成功实现它。
我想从已经制作好的aar插件中访问方法。默认情况下将其检查为android插件。该插件具有以下代码:
package alarm.company.com.unity;
public class myPlugin {
public String myTest(int i){
return "Hello your string number is: "+i;
}
}
已编译的aar插件被复制到Unity文件夹中。 这是访问该方法的c#代码:
const string PluginName = "alarm.company.com.unity.myPlugin";
static AndroidJavaClass _pluginClass;
static AndroidJavaClass _pluginInstance;
public Text text;
// Start is called before the first frame update
void Start()
{
AndroidJavaClass plugin = new AndroidJavaClass(PluginName);
string s = plugin.CallStatic<string>("myTest", 9);
print(s);
text.text = s;
}
分配了 text
并将此脚本放在主摄像机上。但是在模拟器中运行时,我没有收到任何文本或文本对象未更改。该如何解决?
答案 0 :(得分:0)
Unity插件开发首先要设置有点棘手,但一旦能够,它就会非常强大。
耦合事物。
1)您正在使用AndroidJavaClass并尝试在Java中调用非静态方法。如果您想使用该类,则您插件中的方法应该是静态的。
2)否则,您将需要使用AndroidJavaObject来构造您的类,然后才能调用函数。
希望这会有所帮助!
使用非静态代码的示例:
统一代码
using (AndroidJavaObject leetPlugin = new AndroidJavaObject("alarm.company.com.unity.myPlugin")){
string s = leetPlugin.Call("myTest", 9);
print(s);
text.text = s;
}
Android代码
public void myTest(int value) {
return "Your value is " + value;
}
答案 1 :(得分:0)
有人建议您使用统一插件:
使用gradle构建系统。它在Plugins / Android中生成mainTemplate文件。您可以编辑此文件并将Java源代码设置为Java类,这样就不必每次生成时都生成aar:
sourceSets
{
main
{
java
{
srcDirs = ['src']
srcDirs += ['E:/AndroidStudioProjects/PathToJavaClasses']
}
}
}
如果您想将某些东西从Java代码发送到unity,则应该从unity扩展您的活动并调用UnitySendMessage方法
public class MyUnityPlayerActivity extends UnityPlayerActivity{
public void SendUnityMessage()
{
UnityPlayer.UnitySendMessage(UnityGameObjectName, UNITY_FUNCTION_NAME,
params);
}
}