Unity as a Library into Android Project

简介

最近这段时间公司内闷着头想把Unity干入Native项目,早在16年初的时候,那时候也是闲的蛋疼,曾经跑通了安卓和iOS的Unity做为库集成到Native项目的流程,后来加入新公司,又基于2018版的Unity集成过一次,iOS用PBX脚本方式集成的,Android是自己写的Copy脚本完成的,最近发现2019.3Unity已经完美支持了Unity as a Library,所以尝试了一下,里面还是又很多坑,不过磨磨时间都是可以FIX的。

官方文档环境依赖

  • Android Studio `3.3.2+`
  • Unity version `2019.3.a2+`

实操环境

  • Android Studio `3.5.3`
  • Unity version `2019.3.1f1`

操作步骤

Step.1

  • Android Studio 新建项目,如下图:

  • Unity 新建项目(无论Windows用户还是Mac用户都建议安装HUB),如下图:

  • 最终工程结构如下:

Step.2

  • 通过 Unity 打开 UnityProject
  • 选择 File -> Build Settings -> Switch Android Platform -> Export Project 注意事项如下图:

  • 在导出工程之前还有一个关键的地方需要设置,否则会在最终 Native 项目引入时无法编译,如下图(选择IL2CPP和ARM64):

  • 并没有结束,因为你选择了IL2CPP,特别是NDK按照提示你的报错安装就可以(版本要求比较高)

  • 可以点击Export了,注意路径选择,当然你也可以自由先泽,建议按照官方来,如下

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 交互

官方文档(有部分坑,建议按照上面的流程操作)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值