Unity3d与android的集成

Unity3d与android的集成,android,plugins,java-native-interface,unity3d,Android,Plugins,Java Native Interface,Unity3d,我需要创建一个android应用程序,它由Unity3d(动画等)和AndroidDK(AndroidDK指的是用java、清单和资源编写的少量活动)上编写的部分组成 事实上,我已经有了这些部分(至少mock已经准备好=),我不知道如何在它们之间进行通信 我读过很多关于unity3d android集成的文章(主要是关于所谓“插件”的东西),但没有理解这名员工是如何工作的=(我理解的主要事情(除了官方参考文献外,每个人都写过这件事)是关于插件的文档非常糟糕…=) 我能理解的唯一沟通方式是从uni

我需要创建一个android应用程序,它由Unity3d(动画等)和AndroidDK(AndroidDK指的是用java、清单和资源编写的少量活动)上编写的部分组成

事实上,我已经有了这些部分(至少mock已经准备好=),我不知道如何在它们之间进行通信

我读过很多关于unity3d android集成的文章(主要是关于所谓“插件”的东西),但没有理解这名员工是如何工作的=(我理解的主要事情(除了官方参考文献外,每个人都写过这件事)是关于插件的文档非常糟糕…=)

我能理解的唯一沟通方式是从unity3d脚本(使用AndroidJavaClass和AndroidJavaObject)生成意图(广播),以便我的活动(用java编写)能够处理它。但我觉得这不是最好的解决办法

关于这个问题,我读到的是我需要使用JNI(这是java本机接口-为什么?!?-为什么我需要使用本机代码?)

我是否需要在java上创建一些中级代码,目的是与我的java活动进行通信,使用AndroidNDK进行编译,并将其作为插件包含到我的Unity3d项目中?我怎样才能写出中间层呢?我需要使用UnityPlayer而不是“Activity”作为基类吗?为什么?

这是一个关于基本类的教程。

有一个很好的教程。一旦你启动并运行它,你就可以开始在你的应用程序中的任何地方轻松嵌入场景

当您需要从Unity调用Java Android应用程序时,可以添加以下代码:

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

要完全支持Android,您不需要在java上创建一些中级代码

相反,你应该:

  • 在Android SDK上创建一个Lib项目
  • 创建1主活动扩展UnityPlayerPractivity
  • 创建您需要的其他活动并将其添加到清单中
  • 创建资源、布局
  • 通过将所有JAR、资源文件复制到Assets/Plugins/Android文件夹,导出到JAR并将其添加到Unity中
  • 此方法有助于编写推送通知、应用内计费等

    此处参考:(>扩展UnityPlayerPractivity Java代码)

    此外,通过使用以下代码:

    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
    AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    activity.Call("yourFunctionName", parameters);
    
    AndroidJavaClass unityPlayer=新的AndroidJavaClass(“com.unity3d.player.unityPlayer”);
    AndroidJavaObject activity=unityPlayer.GetStatic(“currentActivity”);
    activity.Call(“yourFunctionName”,参数);
    
    你可以在Unity上用Android做很多神奇的事情

    注意*:您的FunctionName必须在从UnityPlayerPractivity扩展而来的主活动中实现(参见步骤2)


    您好,

    Hi@spatulamania,您看过本教程了吗?我在努力做到这一点时遇到了一些问题,我可以开始一个新的问题/聊天吗?@mdelomo已经有一段时间了,但是是的,我已经完成了教程,一切都很顺利。如果你对不起作用的事情有具体的问题,你可能应该问一个新问题。其中一条建议是确保您的标准Android开发环境工作正常,并且不要跳过任何步骤。欢迎查看。任何帮助都将不胜感激。嗨,spatulamania在一个普通的Android应用程序中运行Unity。链接不工作。我已经实现了您的代码,但不幸的是,我无法从Unity访问Android活动的方法。所以,请分享更多的想法或源项目。提前感谢。请看一下Unity3d和相应测试项目中静态和非静态活动函数的调用示例。您好!对于iOS项目,有没有一种方法可以像你的一样,通过循序渐进的指导来做到这一点?unity player的活动最近发生了变化。您可以查看资产存储中的一些资产,它们也替换了活动。@LassiKinnunen我的答案是4年前的,所以可能已经过时了。我不再为Unity工作了,我没有机会更新答案,对不起!是的,我只是为了稍后有人发现这一点而发表评论,没问题。这也是我没有时间调查自己的事情,但我知道的是,我的一个项目依赖于这种东西,不再在android上编译高于5.6的unity。
    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
    AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    activity.Call("yourFunctionName", parameters);