Unity3D工程集成到Android工程步骤及问题解决

我们公司主要开发AR项目的,所以经常需要做Unity和Android的集成,一路走过来,掉进过无数的坑,百度到烂了还有各种请教大神,还是没得解决问题,再凭借自己的直觉猜测才一点点搞定了。

从在开始捋起吧:


1.先让unity同事将unity的项目打包Android工程,一定一定要注意打包的时候注意一个关键地方,这个是影响机子适配问题的(这个问题我被深坑了好久):


一定要选上(ARMv7 + x86)!!!!否则有些手机会出现如下硬件不支持的弹框。



2.开始导入到Android项目中,以module形式加入,(为什么要这样?而不是把代码复制到app的那个module里?因为到时候unity修改代码的时候,就知道什么叫痛苦),

导入之后一定会报错的,不要慌,喝口水压压惊,这个坑我都走过了,不要怕。之前我写过一篇博客处理这个问题,这次再将一次:

(1)将unity的这个module里的 build.grandle的第一行改成:apply plugin: 'com.android.library'

(2)将compileSdkVersion和buildToolsVersion 改成跟你的app里的版本一样

 (3)删掉applicationId这一行

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile files('libs/unity-classes.jar')
    compile files('libs/dingzhihua_new.jar')
}

(4)到unity这个module的AndroidManifest文件里,application删掉label和theme两个属性

(5)把带有那个<intern-filter>的activity,加上android:process="e.unitry3d"(这个是给unity用来调用安卓的,比如按手机返回键的时候会关闭当前界面,不然会没反应或者闪退),并删掉<intern-filter>,不然安装的时候会出现两个app


 <application
        android:banner="@drawable/app_banner"
        android:debuggable="false"
        android:isGame="true">
        <activity
            android:name="com.yuto.customization.UnityPlayerActivity"
            android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:process="e.unitry3d"
            android:screenOrientation="sensorPortrait">
            
            <meta-data
                android:name="unityplayer.UnityActivity"
                android:value="true" />
            <meta-data
                android:name="unityplayer.ForwardNativeEventsToDalvik"
                android:value="false" />
        </activity>
    </application>

3.界面跳转,Android的界面跳转到unity界面,注意导包要导的是刚才在unity的AndroidManifest的那个Activity

 Intent intent = new Intent(CustomizeActivity.this, UnityPlayerActivity.class);
 this.startActivity(intent);

到这里就完成了,基本可以顺利运行了。

但是,但是,但是,有些机子还是会弹出




感觉好崩溃啊,各种百度,找方法解决,还是没!解!决!

有些项目根据http://blog.csdn.net/li438730745/article/details/65937001这篇博客解决了问题,但是还是有不少人没解决,比如我。

而且,我的项目很简单,module除了app和unity之外,没其他的module,app的libs文件也是空的!!!

而且,同一个手机,同一个unity的module,放在两个不同的项目里,竟然有一个能运行,另一个不能运行!!!

认认真真的比对了一天,加上猜测,发现不能运行的项目的app的build.grandle文件里有一行很可疑



很可能是引入的so库跟unity的so库重名冲突了!,虽然我们看不到gpuimage这个的so库。

然后去GitHub下载了GPUImage的module,替换了红框comple这一行,然后就能运行了!

因为gpuimage调用的是C/C++,如果你的app运行进入unity界面出现弹框,就替换compile方式,改成module形式,删掉冲突的so库

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值