1. 程式人生 > >Unity3D 官方文件 平臺特殊化之Android

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

(進入該網頁可能需要科學上網,然後下載SDK具體的包現在直連下載都很快了,不需要去網上找網友提供的包了);

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框架理清了,感覺也是很棒,不管修改了什麼東西,只要單元測試能執行正常基本也就沒什麼問題。