Unity3d与android集成

les*_*hka 47 java-native-interface plugins android unity-game-engine

我需要创建一个Android应用程序,它包含在Unity3d(动画等)和AndroidSDK上编写的部分(通过androidSDK,我的意思是很少用java,manifest和资源编写的活动)

事实上我已经有了这些部分(至少模拟已经准备好了=))我无法弄清楚如何在它们之间进行通信.

我已经阅读了很多关于unity3d android集成的文章(主要是关于称为"插件"的东西)并且无法理解这个人员的工作原理=(我理解的主要内容(每个人都知道官方参考文章写过)是关于插件的文档非常差... =)

我能理解的唯一通信方式是使用unity3d脚本(使用AndroidJavaClass和AndroidJavaObject)进行意图(广播),这样我的活动(用java编写)就可以处理它.但有些东西告诉我这不是最好的解决方案......

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

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

spa*_*nia 36

Here is a tutorial on the basics of running Unity inside of a normal Android app.

Android视图中运行Unity有很棒的教程.启动并运行后,您可以轻松地在应用程序的任何位置嵌入场景.

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

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过AndroidJavaObject活动调用您想要的任何活动方法.像这样的东西:

activity.Call("yourFunctionName", parameters);
Run Code Online (Sandbox Code Playgroud)

  • @spatulamania //第一个链接坏了. (2认同)

Fra*_*yen 7

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

相反,你应该:

  1. 在Android SDK上创建一个Lib项目.
  2. 创建1个主要活动扩展UnityPlayerActivity
  3. 创建其他您需要的活动并将其添加到Manifest中.
  4. 创建资源,布局......
  5. 通过将所有JAR资源文件复制到Assets/Plugins/Android文件夹,导出到JAR并将其添加到Unity中.

此方法有助于编写推送通知,应用计费等...

Ref#here:http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html( - >扩展UnityPlayerActivity Java代码)

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

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
activity.Call("yourFunctionName", parameters);
Run Code Online (Sandbox Code Playgroud)

您可以在Unity上使用Android完成大部分神奇的事情

注意*:yourFunctionName必须在主活动中实现,该活动从UnityPlayerActivity扩展(请参阅步骤2)

问候,