【问题标题】:Access method from android plugin in unity统一从android插件访问方法
【发布时间】:2019-02-06 16:12:57
【问题描述】:

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

【问题讨论】:

    标签: android unity3d


    【解决方案1】:

    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;
        } 
    

    安卓代码

    public void myTest(int value) {
       return "Your value is " + value;
    }
    

    【讨论】:

    • 它使用静态方法,但我无法在 android studio 上收到任何日志消息,例如:Log.i("cool",string); .你能说点什么吗?
    • 已经有一段时间了,但我很确定您需要将 Logcat 过滤器设置为无过滤器,因为您的应用程序不是从工作室运行的。然后您可以使用命令: adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG 来过滤所有 Unity 日志。如果您正在搜索您的特定日志,我建议您使用您的 ClassName 而不是“cool”。然后你可以运行上面相同的命令: adb logcat -s ClassName 并且你的日志应该会显示出来。
    【解决方案2】:

    当您使用插件以实现统一时,一些建议:

    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);
          }
      }
      

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      相关资源
      最近更新 更多