官方默认集成方式
集成思路:
1、导出Unity module包。
2、AndroidStudio导入module,通过打开UnityPlayerActivity的方式展示3D。(UnityPlayerActivity在另外一个进程中)
具体集成步骤请参考:Android Studio项目集成Unity详细教程
优点:
1、3D动画展示不占用主项目内存,当UnityPlayerActivity关闭时会kill 当前进程。
缺点:
1、与UnityPlayerActivity相互通讯麻烦。因为UnityPlayerActivity与主程序不在同一个进程中,需要跨进程通讯。
2、当在主进程打开UnityPlayerActivity时,需要解决Application重复加载问题。解决办法请参考:
Android中当在主进程中打开一个其他进程中的Activity时如何防止Application重复初始化
控件方式集成
集成思路:
1、在主程序中参考官方默认集成方式,将UnityPlayer以控件方式集成在我们的页面上。其实在上个集成方式教程中,里面已经详细的介绍了怎么如何写MyUnityPlayer和重写父类的kill方法。虽然项目不会因为退出Unity页面时退出了,但是本人测试如果重复关闭打开Unity所在的Activity后,程序会出现闪退问题,目前无解中。(有解决了的,请分享一下)
优点:
1、被缺点吃掉了
缺点:
1、能解决闪退的问题,这种集成方式就是最靓的崽。
最优集成方式
集成思路:
1、由于UnityPlayer在destroy()的时候默认会kill当前进程,而第二种集成方式重复打开关闭又会造成闪退。结合这两种情况,下面给出解决办法。
2、解决重复打开关闭问题:将Unity所在的Activity设置singleInstance启动模式,Activity变成单例模式了,每次打开当然就同一个页面了。
3、针对退出kill当前进程解决思路:Unity所在的Activity退出时不结束时不走finish(),而是调用moveTaskToBack将Activity隐藏到后台。
优点:
1、可以以控件的形式集成到我们的页面中
2、所有的页面都在同一个进程中,不会增加传值的问题
3、由于Unity引擎已经在第一次打开页面时加载完成,以后打开就更快了。
缺点:
1、针对singleInstance重复打开传值问题。其实Android有个onNewIntent()方法,第一次打开页面在onCreate中获取intent传值,以后传值就可以在这个方法中传值了。
@Override
protected void onNewIntent(Intent intent) {
}
2、singleInstance导致Unity所在的Activity在栈的回退过程中会导致几个大大小小的坑。具体坑内详情请参考:Android启动模式之singleinstance的坑
3、还在测试中...
在探索过程中发现集成中的帖子挺多,问题解决的没几个。希望大家在Unity集成过程中遇到的坑,麻烦在下面留言,让安卓集成Unity更容易。

本文总结了在Android应用中集成Unity的三种方式:官方默认集成、控件方式集成和最优集成方式,详细阐述了每种方式的集成思路、优缺点,并针对遇到的坑提供了解决方案,如跨进程通讯、防止Application重复初始化、闪退问题等。

372

被折叠的 条评论
为什么被折叠?



