安卓集成Unity开发示例(一)

绿豆饼 2020-05-11

本项目目的是在移动端的 Native App 中以库的形式集成已经写好的 Unity 工程,利用 Unity 游戏引擎便捷的开发手段进行跨平台开发。

Unity官方文档 Unity as a Library integration example to iOS and Android

环境

  • Android Studio 3.5.3
  • Unity version 2019.3.7f1

新建工程操作步骤(安卓)

Step.1

  • Android Studio 新建项目:
    安卓集成Unity开发示例(一)
  • Unity 新建项目:安卓集成Unity开发示例(一)
  • 最终工程结构如下:
  • 安卓集成Unity开发示例(一)

Step.2

  • 通过 Unity 打开 UnityProject

  • 选择 File -> Build Settings -> Switch Android Platform -> Export Project

    安卓集成Unity开发示例(一)

    安卓集成Unity开发示例(一)

  • 这时候选择Export可能会提示JDK路径配置出错,没关系我们到 Preference -> Externl Tools 设置路径
    安卓集成Unity开发示例(一)

安卓集成Unity开发示例(一)

  • 可以点击Export了,路径选择可以自由选择,这里建议按照官方来
    安卓集成Unity开发示例(一)
Step.3
  • 通过 Android Studio 打开 NativeAndroidApp

  • 选择 setting.gradle 文件添加 unityLibrary module

    include ‘:unityLibrary‘
    project(‘:unityLibrary‘).projectDir = new File(‘..\\UnityProject\\androidBuild\\unityLibrary‘)
  • 选择 build.gradle(Module:app)添加 dependencies

    dependencies {
        implementation project(‘:unityLibrary‘)
        implementation fileTree(dir: project(‘:unityLibrary‘).getProjectDir().toString() + (‘\\libs‘), include: [‘*.jar‘])
        // 自己项目的配置
    }
  • 选择 build.gradle(Module:NativeAndroidApp)

    allprojects {
        repositories {
            google()
            jcenter()
    
            // Add Code
            flatDir {
                dirs "${project(‘:unityLibrary‘).projectDir}/libs"
            }
            // End
        }
    }
  • 选择 NativeAndroidApp 的 strings.xml 添加

    <resources>
        <string name="app_name">NativeAndroidApp</string>
        <string name="action_settings">Settings</string>
        // Add Code
        <string name="game_view_content_description">Game view</string>
        // End
    </resources>

解决方案事例

限制

  • 以库形式使用的Unity仅支持全屏渲染,不支持在屏幕的一部分进行渲染;
  • 不支持加载多个Unity运行时实例,Unity可选择附着与当前App的进程,也可以另启一个进程(目前仅限于Android);
  • 开发者需要调整第三方插件,包括原生插件和托管插件,目前我们做VR App就遇到了这种窘妆,库支持堪忧;
  • 生命周期事件的感知(目前最新版本已经添加了部分事件);

包体(粗略计算)

  • Android 空工程包体 2.2M

  • Unity IL2CPP ARM64 & V7a 空工程包体 9.87M & 9.12M

  • Unity Into Android 空工程包体 22.9M:

性能 - 内存

  • 跑在同一进程,资源不能完全释放

  • 跑在不同进程,资源可以完全释放

消息传递(用例后续有时间补齐)

  • 传统数据交换 - 函数传参 - 支持
  • 数据指针交换 - 推拉流数据 - 支持
  • 共享纹理 - 相机采集数据 - 支持
  • C++ 直接交互 - 底层库 - 支持

建议参考

安卓 & U3D 交互

官方文档

相关推荐