统一来自Android插件的访问方法

时间:2019-02-05 16:43:02

标签: android unity3d

这是非常基本的,但是我没有从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并将此脚本放在主摄像机上。但是在模拟器中运行时,我没有收到任何文本或文本对象未更改。该如何解决?

2 个答案:

答案 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)

有人建议您使用统一插件:

  1. 使用gradle构建系统。它在Plugins / Android中生成mainTemplate文件。您可以编辑此文件并将Java源代码设置为Java类,这样就不必每次生成时都生成aar:

    sourceSets 
    {
        main
        {
            java
            {
                srcDirs = ['src']
                srcDirs += ['E:/AndroidStudioProjects/PathToJavaClasses']
            }
        }
    }
    
  2. 如果您想将某些东西从Java代码发送到unity,则应该从unity扩展您的活动并调用UnitySendMessage方法

    public class MyUnityPlayerActivity extends UnityPlayerActivity{
        public void SendUnityMessage()
        {
             UnityPlayer.UnitySendMessage(UnityGameObjectName, UNITY_FUNCTION_NAME, 
             params);
        }
    }