【问题标题】:Unity3d integration with androidUnity3d 与 android 集成
【发布时间】:2011-12-06 16:23:17
【问题描述】:

我需要创建一个 android 应用程序,它由 Unity3d(动画等)和 AndroidSDK 上编写的部分组成(通过 androidSDK,我的意思是很少有用 java、清单和资源编写的活动)

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

我已经阅读了很多关于 unity3d android 集成的文章(主要是关于“插件”的东西)并且无法理解这个工作人员是如何工作的=(我理解的主要内容(除了官方参考之外的每个人都写过)是关于插件的文档很差... =)

我能理解的唯一交流方式是从 unity3d 脚本(使用 AndroidJavaClass 和 AndroidJavaObject)制作一个意图(广播),以便我的活动(用 java 编写)可以处理它。但有些事情告诉我这不是最好的解决方案......

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

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

【问题讨论】:

    标签: android plugins java-native-interface unity3d


    【解决方案1】:

    <s>Here is a tutorial on the basics of @987654321@.</s>

    running Unity inside of Android Views 上有一个很棒的教程。一旦你启动并运行它,你就可以开始在你的应用程序的任何地方轻松地嵌入场景。

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

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

    然后您可以通过活动 AndroidJavaObject 在活动上调用任何您想要的方法。像这样的:

    activity.Call("yourFunctionName", parameters);
    

    【讨论】:

    • 嗨@spatulamania,你完成了这个教程吗?我在尝试时遇到了一些问题,我应该开始一个新问题/聊天吗?
    • @mdelolmo 已经有一段时间了,但是是的,我已经完成了教程,一切正常。如果您对无法正常工作的事情有具体问题,您可能应该提出一个新问题。一条建议是确保您的标准 Android 开发环境运行良好,并且不要跳过任何步骤。
    • 欢迎查看question I just posted。任何帮助将不胜感激。
    • 嗨 spatulamania 在普通的 Android 应用程序中运行 Unity。链接不起作用。我已经实现了您的代码,但不幸的是我无法从 Unity 访问 Android 活动的方法。所以请分享更多的想法或源项目。提前致谢。
    • 看看这里link,例如从 Unity3d 和适当的测试项目调用静态和非静态活动函数。
    【解决方案2】:

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

    相反,您应该:

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

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

    此处参考#: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);
    

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

    注意*:yourFunctionName 必须在从 UnityPlayerActivity 扩展的主 Activity 中实现(参见第 2 步)

    问候,

    【讨论】:

    • 嗨!有没有办法按照你的分步说明对 iOS 项目做同样的事情?
    • unity 玩家活动最近发生了变化。您也可以查看资产商店中替换活动的一些资产。
    • @LassiKinnunen 我的答案是 4 年前的,所以它可能已经过时了。我不再在 Unity 上工作,我没有机会更新答案,抱歉!
    • 是的,我只是为了以后有人发现而发表评论,没有问题。这也是我没有时间审视自己的事情,但我所知道的是,我依赖这些东西的一个项目不再编译为高于 5.6 for android 的统一性。
    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 2011-08-17
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多