当前位置:   article > 正文

Unity as a Library into Android Project_unity as library

unity as library

简介

最近这段时间公司内闷着头想把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
  1. include ':unityLibrary'
  2. project(':unityLibrary').projectDir = new File('..\\UnityProject\\androidBuild\\unityLibrary')
  • 选择 build.gradle(Module:app)添加 dependencies
  1. dependencies {
  2. implementation project(':unityLibrary')
  3. implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])
  4. // 自己项目的配置
  5. }
  • 选择 build.gradle(Module:NativeAndroidApp)
  1. allprojects {
  2. repositories {
  3. google()
  4. jcenter()
  5. // Add Code
  6. flatDir {
  7. dirs "${project(':unityLibrary').projectDir}/libs"
  8. }
  9. // End
  10. }
  11. }
  • 选择 NativeAndroidApp 的 strings.xml 添加(这个是个坑,官方也没有指出来)
  1. <resources>
  2. <string name="app_name">NativeAndroidApp</string>
  3. <string name="action_settings">Settings</string>
  4. // Add Code
  5. <string name="game_view_content_description">Game view</string>
  6. // End
  7. </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 交互

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/118862
推荐阅读
相关标签
  

闽ICP备14008679号