Android中集成Unity的方式总结和遇到的坑

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

官方默认集成方式

集成思路:

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更容易。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值