Unity3D 官方文件 平臺特殊化之Android
版本:unity 5.6 語言:C#
總起:
Android平臺,雖然與IOS開發類似,但因為其硬體沒有完全的標準化,所以會出現各式各樣的問題。這一點在官方文件的第一段就提到了。
Unity Android基本環境的搭建還是比較容易的:
1.Unity本身沒有下載Android外掛的,首先 File -> Build Settings -> [切換到Android] Open Download Page 下載外掛;
3.安裝SDK,這邊我推薦安裝Android Studio,再在其中中安裝SDK:https://developer.android.com/index.html
4.安裝Android模擬,我這邊選擇的是Nox英文版;
5.如果需要使用IL2CPP,安裝一下NDK,5.6.3需要的版本是r10e,不要下錯了。
Unity Remote:
Unity遠端除錯外掛,適用於Android、IOS和tvOS,一開始我以為這個可以直接在Unity中除錯Android,實則不能,所以這個功能很雞肋,不過也有他的使用場景,所以還是介紹一下吧。
除錯步驟:
1.首先在Google Play中找到Unity Remote 5應用,把它下載安裝到Android手機中,如果沒有科學上網的同學,可以在百度上找一下;
2.將手機插上USB介面,允許USB除錯,手機端就準備完成了,模擬器方面,我測試了3種:Genymotion可以直接執行,而Nox和Bluestacks沒有效果;
3.接下來就是Unity中的設定,通過Edit -> Project Settings -> Editor,找到Unity Remote選項,將Device更改成Any Android Device:
4.然後直接執行Unity工程就會看到效果。
所以這個是做什麼用的呢?首先大家可以理解為Android手機為一個擴充套件屏,然後Android手機的觸屏輸入、加速度、陀螺儀、相機、指南針、GPS和搖桿可以作為Unity工程的輸入。
再然後……就沒了,就多了個測試輸入的功能,如果想要測試真機執行情況還是要打成APK在手機上執行。
這邊再說一下兩種特殊的情況:
1.如果是多臺Android裝置連線電腦的情況下,Unity會自動尋找第一臺它找到的裝置,而不能手動配置;
2.在手機端的顯示影象質量很差,可以在Unity Remote的選單中設定Compression為PNG,Resolution為Normal,影象效果就不會有損失了,但會佔用更多的頻寬。
出包介面:
在我們打包工程時,就會用到以下的一個介面:
♦ Texture Compression
圖片紋理壓縮格式,預設為ETC。
♦ Build System
在構建Android專案時最需要了解的就是這邊兩種Build System的區別:
1.Internal(Default)
這是一種比較傳統的構建方式。可以這麼說,開發純Android專案時,過去主流使用的Eclipse就是使用該種構建,是一種ADT的構建方式。
打包一個APK經由以下幾個步驟:
a.準備並打包Unity的Assets;
b.編譯指令碼;
c.處理Plugins外掛;
d.如果Split Application Binary被勾選,會拆分資源到APK和OBB中;
e.使用AAPT打包Android資源;
f.將工程提供的Mantifest檔案和第三方library的整合在一起;
g.將Java程式碼編譯成DEX;
h.如果勾選了IL2CPP Scripting Backend,構建IL2CPP的包;
i.優化APK和OBB包。
2.Gradle(New)
Gradle是一種最新的打包方式,Android Studio就是使用該方式進行構建。這種構建方式會對專案進行更加嚴格的檢驗,使打出來的包更加穩定,總之是比較推薦的。
現在一個比較尷尬的情況是在整合第三方包時,網上大多數教程都是Eclipse時代的,而現在最好是使用Google推薦最新的Android Studio進行整合……兩個IDE,雖然大家說學好一個,另一個不難……哎,出包這塊Android確實比IOS耗精力的多。
♦ Export Project
勾選該選項能匯出Unity工程為Android工程,Internal(Default)是不能匯出為工程的,需要Eclipse的ADT專案,就選擇Build System中沒有介紹的第三個選項ADT(Legacy)(感覺ADT選項和Internal是一個意思,不知道Unity為什麼要這麼設定)。
至於Android Studio的工程,當然ADT匯出的也能用,最好是選擇Gradle進行匯出。
♦ Development Build
如果該選項被勾選,Unity會設定一條分析隧道並啟用CheckJNI,然後下面兩個選項Autoconnect Profiler和Script Debugging也能被勾選。
Script Debugging應該就是Unity的日誌資訊了,但另一個選項不是很理解,Profiler指的是Unity的效能分析器嗎?(希望有知道的大神可以留一下言)
Player Settings介面:
在上面的介面中點選player settings,那麼Inspector視窗就顯示該介面了。
前三個選項Resolution and Presentation、Icon和Splash Image和之前介紹的PC平臺的內容其實大同小異,有需要的可以參考一下之前的文章,這邊就不再多說了。
♦ Other Settings Rendering
Color Space 顏色空間,一般認為手機只支援Gamma空間,不過看了一下說是Android 4.3以上和OpenGLES3以上支援Linear了;
Auto Graphics API,Unity自動選取影象API,預設選取GLES3.1,如果裝置不支援,會選擇GLES3或GLES2。取消勾選後,移除GLES2的選項會出現兩個選項Require ES3.1和Require ES3.1+AEP,可以強制使用3.1;
Multithreaded Rendering 多執行緒渲染,在主執行緒CPU利用率較高的情況下提升效能;
Static Batching 靜態批處理,降低Drawcall,優化效能,和下面一個選項一樣必勾選;
Dynamic Batching 動態批處理;
GPU Skinning 啟用DX11/ES3的一種蒙皮技術;
Graphics Jobs(Experimental) 將圖形渲染迴圈執行至其他CPU核心,只有Vulkan圖形API才支援,實驗性質的選項,可能會導致工程不穩定;
Virtual Reality Supported VR支援;
Protect Graphics Memory 強制圖形緩衝顯示經過硬體的保護路徑,裝置不支援則該選項無效。
♦ Other Settings Identification
Package Name 包名,Google商城的唯一ID,IOS和Android共享該選項;
Version 版本號,IOS和Android共享該選項;
Bundle Version Code 內部版本號,保證每次釋出新版本大於之前的數字就可以;
Minimum API Level 最低API等級;
Target API Level 打包API的等級。
♦ Other Settings Configuration
Scripting Backend 指令碼,IL2CPP和Mono2x,Mono2x就是C#,而IL2CPP是說將C#轉成CPP,其中IL2CPP中的IL是C#編譯後的中間語言;
API Compatibility Level 指令碼API的版本:.Net2.0和.Net2.0 Subset;
Disable HW Statistics 不將硬體統計的資訊傳送給Unity官方,只有專業版才能勾選;
Device Filter 選擇應用程式在指定CPU上執行:ARMv7、x86;
Install Location 指定程式安裝的位置;
Internet Access 網路訪問許可權;
Write Permission sd卡寫入許可權;
Android TV Compatibility 安卓TV相容選項;
Android Game 將應用程式標記為遊戲;
Android Gamepad Support Level 遊戲手柄支援等級;
Scripting Define Symbols 指令碼編譯時的標誌設定;
♦ Other Settings Optimization
這邊的選項基本和PC端的差不多,不同的我用粗體標註了。
Prebake Collision Meshes 只在build遊戲時新增碰撞盒;
Keep Loaded Shaders Alive 保證Shader不會被解除安裝;
Preloader Assets 預先讀取的Assets列表;
Stripping Level 程式碼剝離等級,只有IL2CPP才能使用;
Enable Internal Profiler 啟用內部分析器,允許logcat獲取裝置分析的資料;
Vertex Compression 頂點壓縮,選擇模型會壓縮的資料,比如可以選擇everything,然後去掉positions和lightmap UVs。當然每個每個模型在匯入時,可以設定獨立的該引數,會覆蓋掉該選項;
Optimize Mesh Data 優化Mesh資料,勾選該選項會移除材質所不需要的Mesh資料,例如tangents、normals、colors、UV。
♦ Publishing Settings
Keystore 可以建立金鑰庫,在對接某些第三方庫時需要一個金鑰庫,在你指定了一個金鑰後,每次重啟Unity後打包API都會要求輸入密碼;
Split Application Binary 將包體分割成APK和OBB,在Google Play Store上釋出100MB以上的應用程式時,需要勾選,不過我們這邊連Google都上不去,所以並沒有什麼用。
總結:
這邊介紹的主要是官方文件上提供的知識,Android和Unity對接的文章一搜一大把,當然很多是過時的。
這邊個人推薦的對接方式是Android Studio打包aar給Unity使用,個人原本計劃打算寫一篇相關的部落格的,不過還是得看時間了。這邊介紹另一位大神的博文:http://blog.csdn.net/zhangdi2017/article/details/63254563。大家可以參考一下。
個人:
最近買了很多軟體工程的書,主要是Bob大叔的幾本書還有重構、設計模式什麼的。
一開始看《程式設計師的職業素養》,想著打發一下閒暇的時間,可我看了第一章,我著迷似的閱讀該書,程式在出包時也忍不住翻上幾頁。花了三天時間把它看完了,對裡面的一些觀點不能再認同。
嘗試了一下單元測試,花了幾個小時把我之前設計的UI框架理清了,感覺也是很棒,不管修改了什麼東西,只要單元測試能執行正常基本也就沒什麼問題。