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庫