知識點來源:人間自有韜哥在,豆包
目錄
- 一、發布應用程序
- 1. 修改發布必備設置
- 1.1 打開設置面板
- 1.2 修改公司名、游戲項目名、版本號和默認圖標
- 1.3 修改 Package Name 和 Minimum API Level
- 2. 發布應用程序
- 2.1 配置 Build Settings
- 2.2 選擇發布選項
- 2.3 構建 APK 文件
- 3. 測試發布的 APK 文件
- 3.1 使用 Android 設備進行測試
- 3.2 使用 Android 模擬器進行測試
- 二、發布界面參數介紹
- 1.1.BuildSettings生成設置
- 2.PlayerSettings
- 3.OtherSettings-渲染
- 4.OtherSettings-Vulkan設置和身份證明
- 5.OtherSettings-配置(Configuration)
- 6.OtherSettings-ScriptCompilation
- 7.OtherSettings-優化和堆棧跟蹤
- 8.PublishingSettings-KeystoreManager
- 9.PublishingSettings-其他
- 三、交互項目創建
- 1.Unity調用安卓
- 2.安卓調用Unity
- 3.Android開發的必備原理
- 4.交互項目創建
一、發布應用程序
1. 修改發布必備設置
1.1 打開設置面板
在Unity編輯器中,依次點擊 File
-> Build Settings
,接著在彈出的窗口里點擊 Player Settings
按鈕,這將打開 Player Settings 面板。
1.2 修改公司名、游戲項目名、版本號和默認圖標
- 公司名:在 Player Settings 面板的
Identification
部分,找到Company Name
字段,把它修改為你公司的名稱。 - 游戲項目名:同樣在
Identification
部分,將Product Name
字段修改為你的游戲項目名稱。 - 版本號:還是在
Identification
部分,修改Version
字段,以反映游戲當前的版本號,版本號通常遵循主版本號.次版本號.修訂號
的格式,例如1.0.0
。 - 默認圖標:在
Other Settings
下的Icon
部分,點擊+
按鈕,選擇你準備好的圖標文件(通常為 PNG 格式)。Unity 支持多種尺寸的圖標,你可以上傳不同尺寸的圖標以適配不同的設備。
1.3 修改 Package Name 和 Minimum API Level
- Package Name:在
Other Settings
部分,找到Package Name
字段,這個字段是應用在 Android 系統中的唯一標識符,一般采用反向域名的格式,例如com.yourcompany.yourgame
,必須對其進行修改設置。 - Minimum API Level:同樣在
Other Settings
部分,找到Minimum API Level
字段,根據你的游戲兼容性需求選擇合適的 Android API 級別。通常建議選擇一個較廣泛支持的 API 級別,但也要考慮到你使用的功能對 API 級別的要求。
2. 發布應用程序
2.1 配置 Build Settings
在 Build Settings
窗口中,選擇 Android
平臺,然后點擊 Switch Platform
按鈕,等待 Unity 完成平臺切換。
2.2 選擇發布選項
- Build System:通常選擇
Gradle
。 - Target SDK Version:根據你的需求選擇合適的 Android SDK 版本。
- Scripting Backend:可以選擇
IL2CPP
以獲得更好的性能,或者選擇Mono
以獲得更廣泛的兼容性。
2.3 構建 APK 文件
點擊 Build
按鈕,選擇一個保存 APK 文件的目錄,然后等待 Unity 完成構建過程。構建過程可能需要一些時間,具體取決于項目的大小和復雜度。
3. 測試發布的 APK 文件
3.1 使用 Android 設備進行測試
- 開啟 USB 調試:在 Android 設備的
設置
->關于手機
中,多次點擊版本號
開啟開發者選項,然后在開發者選項中開啟USB 調試
功能。 - 連接設備:使用 USB 數據線將 Android 設備連接到電腦。
- 安裝 APK 文件:在電腦上找到之前構建好的 APK 文件,將其復制到 Android 設備上,然后在設備上找到該文件并點擊安裝。
- 測試游戲:安裝完成后,在設備的應用列表中找到并打開游戲,進行全面的測試,確保游戲的各項功能正常運行。
3.2 使用 Android 模擬器進行測試
- 安裝模擬器:可以使用 Android Studio 自帶的模擬器,或者第三方模擬器如 BlueStacks。
- 啟動模擬器:啟動模擬器并等待其完全啟動。
- 安裝 APK 文件:將 APK 文件拖放到模擬器窗口中,按照提示完成安裝。
- 測試游戲:安裝完成后,在模擬器的應用列表中找到并打開游戲,進行測試。
二、發布界面參數介紹
1.1.BuildSettings生成設置
設置項 | 描述 | 可選值及說明 |
---|---|---|
Texture Compression(紋理壓縮) | 設置發布后的紋理壓縮格式 | 1. Use Player Settings:使用在播放器設置中設置的紋理壓縮格式 2. ETC:使用ETC格式 3. ETC2:使用ETC2格式,安卓常用,支持透明通道,老設備可能不支持 4. ASTC:使用ASTC格式 5. DXT:使用DXT格式 6. PVRTC:使用PVRTC格式 可統一設為ETC2,并在ETC2 fallback設置不支持時的替代方式 |
ETC2 fallback(ETC2回退) | 當Unity用于不支持ETC2的安卓設備時的RGBA紋理格式 | 1. 32 - bit:32位,以全分辨率存儲RGBA紋理,質量最高,內存占用最多 2. 16 - bit:16位,以全分辨率存儲RGBA紋理,質量較低,內存占用相對較少 3. 32 - bit, half resolution:32位,半分辨率,紋理會模糊,內存占用較小 非ETC2壓縮,大多用32 - bit備用,取決于GPU支持 |
Export Project(導出項目) | 勾選后,將Unity項目導出為可導入Android Studio的Gradle項目 | - |
Symlink Sources(符號鏈接源) | 當勾選Export Project時才能勾選,決定是否在Unity和導出的Gradle項目之間共享Java和Kotlin源文件 | 啟用后利于測試和迭代Java和Kotlin代碼,重新導出時更改會保留,適合二次開發 |
Build App Bundle (Google Play)(生成應用程序資源包) | 是否將應用程序作為Android應用捆綁包(AAB) | 1. 啟用:發布AAB,可配合安卓二次開發 2. 禁用:發布APK,可直接安裝 |
Create symbols.zip(創建符號壓縮文件) | 符號文件可幫助調試應用程序 | 1. Disabled:不生成 2. Public:生成公共符號包,包含解析函數地址信息,包小于調試符號包 3. Debugging:生成調試符號包,含完整調試信息和符號表,可解析堆棧、附加調試器 |
Run Device(運行設備) | 指定在哪個附加設備上測試生成 | 連接新設備或列表無設備時,點擊Refresh刷新 |
Build to Device(構建到設備) | 不創建完整構建,將修改文件直接部署到設備 | 速度快,方便調試 |
Development Build(開發構建) | 是否包含腳本調試符號和性能分析器到項目中 | 勾選可調試應用程序 |
Autoconnect Profiler(自動連接分析器) | 是否自動將分析器連接到生成的應用程序 | - |
Deep Profiling(深度分析) | 是否啟用深度剖析在分析器中 | 啟用可返回詳細分析數據,但會降低腳本執行速度 |
Script Debugging(腳本調試) | 是否允許調試應用程序的腳本文件 | Wait For Managed Debugger:程序運行腳本代碼前是否等待調試器連接 |
Compression Method(壓縮方法) | Unity在構建時壓縮項目中數據的方式 | 1. Default:默認用ZIP,壓縮效果略好,解壓慢 2. LZ4:快速壓縮格式,提高加載時間 3. LZ4HC:LZ4高壓縮版本,構建慢,發布版本效果好,提高加載時間 |
Max Texture Size(最大的紋理大小) | 用于本地開發時導入紋理的最大尺寸 | 減小可加快資源導入和平臺切換 |
Texture Compression(紋理壓縮相關選項) | 選擇可加快資源導入和平臺切換 | 1. No Override:使用默認設置 2. Force Fast Compressor:強制快速壓縮 3. Force Uncompressed:強制解壓縮 |
2.PlayerSettings
設置項 | 分類 | 描述 | 可選值及說明 |
---|---|---|---|
icon(圖標設置) | 基礎設置 | 設置在設備上顯示的應用圖標 | 1. Adaptive:運行在 Android 8.0 及以上版本設備的應用圖標 2. Round:運行在 Android 7.1 及以上版本設備的應用圖標 3. Legacy icons:運行在 Android 7.1 以下版本設備的應用圖標 |
Resolution and Presentation(分辨率和演示設置) | 基礎設置 | - | - |
Fullscreen Mode(全屏模式) | 分辨率和演示設置 | - | 1. Fullscreen Window:全屏窗口,導航欄始終隱藏,應用內容可能縮放,有黑邊 2. Windowed:窗口模式,大小取決于應用分辨率 |
Default Window Width | 分辨率和演示設置 | 應用程序窗口的默認窗口寬度 | 單位為像素 |
Default Window Height | 分辨率和演示設置 | 應用程序窗口的默認窗口高度 | 單位為像素 |
Minimum Window Width | 分辨率和演示設置 | 應用程序窗口的最小寬度 | 單位為像素 |
Minimum Window Height | 分辨率和演示設置 | 應用程序窗口的最小高度 | 單位為像素 |
Resizable Window(可調整大小的窗口) | 分辨率和演示設置 | 設置用戶是否可調整應用窗口大小,可在 Android 和平板應用中啟用多窗口功能 | 詳情見 Android Developers |
Hide Navigation Bar | 分辨率和演示設置 | 是否隱藏頂部顯示的導航欄 | - |
Render outside safe area | 分辨率和演示設置 | 是否使用所有可用屏幕控件渲染,包括劉海區域 | - |
Optimized frame Pacing | 分辨率和演示設置 | 是否均勻分布幀以減小幀率方差,啟用后體驗更流暢 | - |
Resolution Scaling Mode(分辨率縮放模式) | 分辨率和演示設置 | - | 1. Disabled:禁用,應用以設備本機屏幕分辨率呈現 2. Fixed DPI:使用 API 應用分辨率縮放,優化性能和電池壽命 |
Target DPI | 分辨率和演示設置 | 若設備本機屏幕 DPI 高于此值,Unity 降低應用分辨率匹配設置 | 計算方式:Min(Target DPI * Factor / Screen DPI,1),Factor 是 Quality 質量設置中 Resolution Scaling Fixed DPI Factor 參數 |
Reset resolution on window resize | 分辨率和演示設置 | 本機窗口大小更改時,是否將屏幕分辨率設為新的本機窗口大小,若為 Fixed DPI 則重新計算分辨率 | - |
Blit Type(光高類型) | 分辨率和演示設置 | 是否使用 Blit 將最終圖像呈現在屏幕上 | 1. Always:Unity 渲染到屏幕外緩沖區,再用 Blit 復制到設備幀緩沖區 2. Never:Unity 渲染到設備操作系統提供的幀緩沖區,失敗有警告,通常更快但不兼容所有設備 3. Auto:先渲染到設備提供的幀緩沖區,失敗則用 Blit 呈現 |
Supported Aspect Ratio(支持的縱橫比) | 分辨率和演示設置 | - | - |
Aspect Ratio Mode | 分辨率和演示設置 | 指定應用支持的最大縱橫比,設備縱橫比大于此值時,Unity 用此縱橫比并添加黑條 | 1. Legacy Wide Screen(1.86):支持 Android 傳統寬屏寬高比 2. Native Aspect Ratio:支持 Android 本機寬高比 3. Custom:自定義縱橫比 |
Up To | 分辨率和演示設置 | 選擇自定義縱橫比時可自行設置 | - |
Orientation(屏幕取向) | 分辨率和演示設置 | - | - |
Default Orientation | 分辨率和演示設置 | 指定應用使用的屏幕方向 | 1. Portrait:豎屏,應用窗口底部和屏幕底部對齊 2. Portrait Upside Down:豎屏倒置,應用窗口底部和屏幕頂部對齊 3. Landscape Right:右橫屏,應用窗口右側和屏幕底部對齊 4. Landscape Left:左橫屏,應用窗口左側和屏幕底部對齊 5. Auto Rotation:自動旋轉,可勾選允許的方向 |
Use 32 - bit Display Buffer | 分辨率和演示設置 | 顯示緩沖區是否保存 32 位顏色值而非 16 位,后期處理有條紋或需 Alpha 值時啟用 | 某些后期處理效果需此設置,因以相同格式創建渲染紋理 |
Disable Depth and Stencil | 分辨率和演示設置 | 是否禁用深度和模板緩沖區 | - |
Render Over Native UI | 分辨率和演示設置 | 是否在 Android 或 iOS 的本機 UI 上渲染,生效需相機清除標志設為使用 Alpha 值低于 1 的純色 | - |
Show Loading Indicator(顯示加載指示器) | 分辨率和演示設置 | 指定加載指示器是否顯示及顯示方式 | 1. Don’t Show:不顯示加載指示條 2. Large:顯示大的加載指示條 3. Inversed Large:顯示大的加載指示條,顏色翻轉 4. Small:顯示小的加載指示條 5. Inversed Small:顯示小的加載指示條,顏色翻轉 |
Splash Image(啟動圖像設置) | 基礎設置 | - | - |
Virtual Reality Splash Image | 啟動圖像設置 | 虛擬現實的初始屏幕設置 | - |
Show Splash Screen | 啟動圖像設置 | 是否顯示啟動圖像,收費版本可修改,免費版本不能改 | - |
Preview | 啟動圖像設置 | 預覽啟動圖像 | - |
Splash Style(啟動風格) | 啟動圖像設置 | - | 1. Dark on Light:暗到亮 2. Light on Dark:亮到暗 |
Animation(啟動圖像動畫效果) | 啟動圖像設置 | - | 1. Static:靜態不動 2. Dolly:由小變大 3. Custom:自定義 |
Draw Mode(繪制模式) | 啟動圖像設置 | - | 1. Unity Logo Below:Unity Logo 顯示在前 2. All Sequential:所有按順序 3. Logos:可添加 Logo 圖片按順序顯示 |
Overlay Opacity | 啟動圖像設置 | 覆蓋不透明度 | - |
Background Color | 啟動圖像設置 | 背景顏色 | - |
Blur Background Image | 啟動圖像設置 | 是否模糊背景圖像 | - |
Background Image | 啟動圖像設置 | 背景圖像 | - |
Alternate Portrait Image | 啟動圖像設置 | 備選圖像 | - |
Static Splash Image | 啟動圖像設置 | 靜態啟動圖像 | - |
Scaling(縮放比例) | 啟動圖像設置 | - | 1. Center:居中(僅縮小),圖像太大時縮小,否則以原始大小繪制 2. Scale to fit(填充):縮放圖像使較長尺寸適合屏幕,用黑色填充空白 3. Scale to fit(裁剪):縮放圖像使較短尺寸適合屏幕,裁剪較長維度 |
3.OtherSettings-渲染
設置項 | 描述 | 可選值及說明 |
---|---|---|
Color Space(色彩空間) | 切換 Unity 中用于渲染的色彩空間 | 1. Gamma(伽馬):紋理傾向于保存在此空間,但著色器采樣時基于伽馬值可能導致結果不準確 2. Linear(線性):效果相對較好,不是所有平臺都支持。支持平臺有 Android、iOS、WebGL、Windows、Mac OS X 、Linux。Android 至少需 OpenGL ES 3.0 圖形 API 和 Android 4.3;iOS 需要 Metal 圖形 API;WebGL 至少需 WebGL 2.0 圖形 API。確定主流設備支持情況選擇,不支持自動退出 |
Vulkan | 一個跨平臺的 2D 和 3D 繪圖應用程序接口,是 OpenGL 的下一代版本,旨在提供更低的 CPU 開銷與更直接的 GPU 控制 | - |
Auto Graphics API(自動圖形接口) | 控制圖形 API 接口的使用方式 | 1. 勾選:Unity 自動嘗試使用對應圖形 API 接口,默認使用 Vulkan,不支持則退到 GLES3.2、GLES3.1 或 GLES3.0 2. 不勾選:可在列表中自行對使用的圖形 API 接口進行排序,設置使用優先級。下方副選項 ES3.1、ES3.1+AEP、ES3.2 用于配置最低 OpenGL ES 3.X 次要版本(Require ES3.1: 要求使用 ES3.1;Require ES3.1 + AEP: 要求使用 ES3.1 + AEP;Require ES3.2: 要求使用 ES3.2)。只有當 GLES2 不在列表中時,Unity 才會將額外的三個選項要求添加到 Android 應用清單中,若發布到 Google Play 應用商店,不受支持設備不會顯示該應用 |
Color Gamut(色域) | 添加或刪除 Android 平臺用于渲染的色域,色域定義設備可顯示的顏色范圍 | 1. sRGB:默認且必需的色域,一般手機使用此色域即可 2. DisplayP3:當定位具有寬色域顯示的設備(如 PC 主機游戲)時,可利用完整顯示功能 |
Multithreaded Rendering(多線程渲染) | 將圖形 API 調用從 Unity 的主線程移動到單獨的工作線程,提升主線程 CPU 使用率較高的應用程序性能 | 啟用此選項可實現;不啟用則不進行此操作 |
Static Batching(靜態批處理) | 將靜態物體合并處理 DC,提升性能 | 啟用可實現合并處理;不啟用則不進行此操作 |
Dynamic Batching(動態批處理) | 動態合并 DC 提高性能,可編程渲染管線(SPR)處于活動狀態(啟用 URP 或 HDRP)時不起作用,使用 FairyGUI 時需開啟以優化 DC | 啟用可實現動態合并;不啟用則不進行此操作,且在特定情況(啟用 URP 或 HDRP)下無法使用 |
Compute Skinning(計算蒙皮) | 啟用 DX11/ES3 GPU 計算蒙皮,釋放 CPU 資源,對圖形接口版本要求較高(PC 上 DX11、移動設備 ES3) | 啟用可啟用計算蒙皮;不啟用則不進行此操作 |
Graphics Jobs (Experimental)(圖形作業) | 啟用后將渲染循環的圖形任務移到其它 CPU 內核上運行的工作線程,減少主線程時間 | 啟用可實現任務轉移;不啟用則不進行此操作 |
Texture Compression Format(紋理壓縮格式) | 可在 ASTC、ETC2、ETC 之間選擇紋理壓縮格式 | 可選擇 ASTC、ETC2、ETC 其中一種格式 |
Normal Map Encoding(法線地圖編碼) | 選擇 XYZ 或 DXT5nm 樣式設置法線映射編碼,影響法線貼圖的編碼方案和壓縮格式 | 1. 選擇 XYZ 樣式 2. 選擇 DXT5nm 樣式:法線貼圖質量更高,但在著色器中解碼成本更高 |
Lightmap Encoding(光照貼圖編碼) | 選擇“正常質量”或“高質量”設置光照貼圖編碼,影響光照貼圖的編碼方案和壓縮格式 | 1. 選擇“正常質量” 2. 選擇“高質量” |
Lightmap Streaming(光照貼圖流) | 是否對光照貼圖使用 Mipmap 流式處理 | 選擇啟用則使用;選擇不啟用則不使用 |
Streaming Priority(流優先級) | 設置 Mipmap 流式處理系統中所有光照貼圖的優先級,生成光照貼圖時應用于所有光照貼圖,正數表示更高優先級,范圍為 –128 到 127 | 可設置具體數值(在 –128 到 127 之間的整數) |
Frame Timing Stats(幀時序統計) | 啟用可收集 CPU 和 GPU 幀時間統計信息,需和攝像機上的動態分辨率設置(Camera 組件下的 Allow Dynamic Resolution 選項)結合使用,確定應用程序受 CPU 還是 GPU 限制 | 啟用可收集統計信息;不啟用則不收集 |
OpenGL: Profiler GPU Recorders | 是否啟用 OpenGL 的探查 GPU 記錄器,在 OpenGL 上,探查 GPU 記錄器會禁用 GPU 探查器 | 啟用則開啟記錄器并禁用 GPU 探查器;不啟用則不開啟記錄器 |
Virtual Texturing(虛擬紋理) | 在場景有很多高分辨率紋理時減少 GPU 內存使用量和紋理加載時間,將紋理拆分為瓦片,按需上傳到 GPU 內存,不兼容安卓設備 | 啟用可實現虛擬紋理功能;不啟用則不進行此操作,且因不兼容安卓設備,安卓平臺無法使用 |
Shader Precision Model(著色器精度模型) | 控制著色器中使用的采樣器的默認精度 | - |
360 Stereo Capture(360 度立體捕捉) | Unity 是否可以捕獲立體 360 度全景圖像和視頻,不兼容 Android | 啟用則可進行捕捉操作;不啟用則不進行此操作,且因不兼容 Android,安卓平臺無法使用 |
4.OtherSettings-Vulkan設置和身份證明
設置項 | 分類 | 描述 | 可選值及說明 |
---|---|---|---|
SRGB Write Mode(SRGB 寫入模式) | Vulkan設置 | 允許呈現器在運行時切換 sRGB 寫入模式,可暫時關閉線性到 sRGB 寫入顏色轉換 | 1. 啟用:可切換 sRGB 寫入模式,但不建議移動設備啟用,會增加 GPU 負擔 2. 不啟用:保持默認的 sRGB 寫入模式 |
Number of swapchain buffers(交換鏈緩沖區數量) | Vulkan設置 | 設置交換鏈緩沖區數量,與Vulkan渲染器配合使用,可解決移動平臺延遲問題 | 1. 設為 2:雙緩沖 2. 設為 3:三重緩沖,一般保持為 3,不建議安卓設備使用雙緩沖,會產生負面影響 |
Acquire swapchain image late as possible(盡可能晚的獲取交換鏈圖像) | Vulkan設置 | 啟用后,Vulkan 延遲獲取后緩沖器,直到將幀渲染為屏幕外圖像,與雙緩沖結合可提高性能,但額外的 blit 會占用帶寬 | 1. 啟用:延遲獲取后緩沖器,可能提高性能但有帶寬占用風險,不建議安卓設備修改 2. 不啟用:按常規方式獲取后緩沖器 |
Recycle command buffers(回收命令緩沖區) | Vulkan設置 | 決定 Unity 執行命令緩沖區后是回收還是釋放命令緩沖區 | 1. 回收:執行后回收命令緩沖區 2. 釋放:執行后釋放命令緩沖區 |
Apply display rotation during rendering(在渲染期間應用顯示旋轉) | Vulkan設置 | 啟用可在顯示的本機方向上執行所有渲染,有性能優勢但有使用限制 | 1. 啟用:在本機方向渲染,有性能優勢但有使用限制,不建議修改 2. 不啟用:按常規方式渲染 |
Override Default Package Name(是否覆蓋默認包名稱) | 身份證明 | 用于在公司名和游戲名不是英文時,自行設置包名 | 1. 勾選:可自行設置包名 2. 不勾選:使用默認包名 |
Package Name(軟件包名) | 身份證明 | 應用程序的 ID,用于在設備和安卓應用商店中唯一標識應用 | 格式為 com.公司名.產品名,只能包含字母數字和下劃線,每段都必須以字母開頭 |
Version(版本號) | 身份證明 | 標識應用程序包的迭代 | 格式為數字.數字.數字……,如 1.0、4.3.2、1.2.1 等 |
Bundle Version Code(內部版本號) | 身份證明 | 用于確定版本新舊,數字越大版本越新,不顯示給用戶 | 為整數,每次發布新版本可讓數字加一 |
Minimum API Level(最低API級別) | 身份證明 | 決定應用程序運行所需的最低 API 級別,SDK 版本低于該設置的設備無法安裝應用 | 設置具體的 API 級別,如 Android 系統的 API 版本號 |
Target API Level(目標API級別) | 身份證明 | 指定應用的目標 API 級別,通知 Android 系統已針對目標版本測試,應用也可在較低版本運行(取決于 Minimum API Level) | 設置具體的 API 級別,如 Android 系統的 API 版本號 |
5.OtherSettings-配置(Configuration)
設置項 | 描述 | 可選值及說明 |
---|---|---|
Scripting Backend(腳本后端) | 決定Unity如何在項目中編譯和執行C#代碼 | 1. Mono:將C#編譯為.Net公共中間語言CIL,并使用公共語言運行時執行中間語言 2. IL2CPP:將C#編譯為CIL,再將CIL轉換為C++,最后將C++編譯為本機代碼 |
Api Compatibility Level(API兼容性級別) | 決定可以在項目中使用的.Net API,影響代碼和第三方庫的兼容性 | 1…Net Standard 2.1:和.Net Standard 2.1兼容,生成較小版本,具有完整跨平臺支持 2…Net Framework:和.Net Framework兼容(包含.Net Standard 2.1所有內容),包含更多API支持,但生成包更大。使用C#高級功能報錯時可嘗試切換,有替代方案時建議用.Net Standard 2.1以減小包體 |
C++ Compiler Configuration(C++編譯器配置) | 只有將Scripting Backend設置為IL2CPP才能使用該選項 | 1. Debug(調試模式):關閉所有優化,代碼生成速度快但運行慢,用于調試 2. Release(發布模式):對代碼進行優化,編譯后代碼運行快、二進制文件小,但編譯時間長 3. Master(大師模式):實現所有可能的優化,發布時間比發布模式長,發布最終版本時可使用 |
Use incremental GC(使用增量GC) | 啟用后可使用增量垃圾回收器,將GC分散到多個幀上執行,降低一幀中GC造成的卡頓 | 啟用或不啟用 |
Assembly Version Validation(程序集版本驗證) | Mono是否驗證強名稱程序集中的類型,強名稱程序集為程序集創建唯一標識,防止程序集沖突 | 驗證或不驗證 |
Mute Other Audio Sources(將其它音頻源靜音) | 希望在運行Unity應用程序時停止后臺運行應用程序中的音頻,可啟用該選項,否則后臺音頻和Unity音頻一起播放 | 啟用或不啟用 |
Target Architectures(目標體系結構) | 允許應用程序運行的CPU,64位環境運行安卓應用有性能優勢,64位應用可處理超4GB內存空間,Mono模式只能選ARMv7,IL2CPP模式可選更多 | 1. ARMv7:32位的ARM 2. ARM64:64位的ARM 3. x86(Chrome OS):32位 4. x86-64(Chrome OS):64位 |
Split APKs by target architecture(按目標架構拆分APK) | 啟用后,為目標體系結構中選擇的每個CPU架構創建單獨的APK,在Google Play中根據設備情況下載對應版本APK,可減小apk大小,但主要針對Google Play,國內產品幾乎不使用 | 啟用或不啟用 |
Target Devices(目標設備) | 指定允許運行APK的目標設備 | 1. All Devices(所有設備):允許apk在所有Android和Chrome OS設備上運行 2. Phones,Tablets,and TV Devices Only(手機、平板、電視設備):允許apk在Android手機、平板電腦、電視上運行,不能在Chrome OS設備上運行 3. Chrome OS Devices Only(Chrome OS設備):允許apk在Chrome OS設備上運行,不能在Android手機、平板、電視上運行 |
Install Location(安裝位置) | 指定設備上應用程序的安裝位置 | 1. Automatic(自動):由操作系統決定,用戶可移動安裝位置 2. Prefer External(首選外部):先嘗試安裝到外部存儲(SD卡),不行則安裝到手機存儲空間 3. Force Internal(強制內部):安裝到手機存儲空間,用戶無法移動到外部存儲安裝 |
Internet Access(互聯網接入) | 選擇是否始終將網絡權限添加到Android清單(即使未使用任何網路API) | 1. Auto:僅當使用網絡API時添加互聯網訪問權限 2. Require:始終添加互聯網訪問權限 |
Write Permission(寫入權限) | 是否啟用對外部存儲(SD卡)的寫入訪問權限,并向Android應用清單添加相應權限 | 1. Internal(內部):僅授予對內部存儲的寫入權限 2. External(外置SD卡):啟用對外部存儲的寫入權限 |
Filter Touches When Obscured(遮擋時過濾觸摸) | 啟用后丟棄在另一個可見窗口覆蓋Unity應用程序時收到的觸摸(觸屏事件),防止竊聽劫持 | 啟用或不啟用 |
Sustained Performance Mode(持續性能模式) | 啟用此選項可在較長時間段內設置可預測且一致的設備性能級別,無需熱限制,但整體性能可能降低 | 啟用或不啟用 |
Low Accuracy Location(低精度定位) | 啟用后改為低精度值與Android位置API配合使用 | 啟用或不啟用 |
Chrome OS Input Emulation(Chrome OS輸入仿真) | Chrome OS操作系統默認將鼠標和觸摸板輸入事件轉為觸屏輸入事件,取消可禁用此默認行為 | 啟用或不啟用 |
Android TV Compatibility(安卓電視兼容性) | 啟用后應用程序標記為兼容Android TV | 啟用或不啟用 |
Android Game(安卓游戲) | 啟用后將輸出的apk標記為游戲而非常規應用 | 啟用或不啟用 |
Android Gamepad Support Level(安卓游戲輸入板支持等級) | 選擇玩游戲時支持的輸入方式 | 可根據需求選擇相應等級 |
Warn about App Bundle size(警告應用程序包的大小) | 只有在Build Settings中勾選了Build App Bundle(Google Play)才有用,應用程序包大小超過閾值時收到警告 | 可設置具體的閾值大小 |
Active Input Handling(活動輸入處理) | 選擇處理來自用戶輸入的方式 | 1. Input Manager:老的輸入系統,Input相關 2. Input System Package:新輸入系統 3. Both:同時使用,在Unity進階之InputSystem中有詳細講解 |
6.OtherSettings-ScriptCompilation
設置項 | 分類 | 描述 | 可選值及說明 |
---|---|---|---|
Scripting Define Symbols(腳本定義符號) | 腳本編譯 | 設置自定義編譯標志,使用第三方內容時可能在此添加腳本符號,Unity 有內置腳本符號,可配合多路測試 #if 使用,也可自定義 | 可添加自定義腳本符號,利用內置腳本符號(如 Lua 熱更相關、FairyGUI 相關等),通過 #if 、#elif 、#else 、#endif 控制代碼邏輯 |
Additional Compiler Arguments(其它編譯器參數) | 腳本編譯 | 向此列表添加條目以將其他參數傳遞給 Roslyn 編譯器 | 1. 按“+”按鈕創建新條目添加參數 2. 按“-”按鈕刪除條目 3. 單擊“應用”按鈕在將來編譯中包括其他參數 4. 單擊“還原”按鈕將列表重置為最近應用的狀態 |
Suppress Common Warnings(禁止顯示常見警告) | 腳本編譯 | 禁用此設置可顯示 C# 警告 | 1. 啟用:禁止顯示常見 C# 警告,如 CS0169(從不使用私有字段)、CS0649(未初始化的私有或內部字段聲明) 2. 禁用:顯示 C# 警告 |
Allow ‘unsafe’ Code(允許使用“不安全”代碼) | 腳本編譯 | 啟用對在預定義程序集中編譯“unsafe”C# 代碼的支持 | 1. 啟用:支持編譯“unsafe”C# 代碼,使用指針等操作需勾選此項 2. 不啟用:不支持編譯“unsafe”C# 代碼 |
Use Deterministic Compilation(使用確定性編譯) | 腳本編譯 | 啟用此設置后,編譯的程序集在每次編譯時都是完全相同的,可用于確定二進制文件是否從受信任的源編譯 | 1. 啟用:使用確定性編譯,編譯的程序集每次相同 2. 禁用:防止使用 -確定性 C# 標志進行編譯 |
Enable Roslyn Analyzers(啟用羅斯林分析器) | 腳本編譯 | 禁用此設置可編譯用戶編寫的腳本,而無需項目中可能存在的 Roslyn 分析器 DLL(Roslyn 是微軟的.Net 開源編譯器,提供豐富的代碼分析 API) | 1. 啟用:使用 Roslyn 分析器分析腳本 2. 禁用:不使用 Roslyn 分析器,直接編譯用戶編寫的腳本 |
unsafe 關鍵詞(基本概念) | C# 語言特性 | 默認 C# 不支持指針,unsafe 關鍵詞用于表示不安全的上下文,在 C# 中進行指針相關操作必須使用該關鍵詞,不安全代碼在 CLR 中是指無法驗證的代碼,但不一定危險,使用時需確保無安全風險和指針錯誤 | 在 C# 中使用指針等操作需使用 unsafe 關鍵詞,代碼在 CLR 中無法驗證安全性,僅在完全信任的程序集中執行不安全代碼 |
unsafe 關鍵詞(基本使用) | C# 語言特性 | 在 Unity 中正常使用 unsafe 關鍵詞編寫程序,需在 Unity 的 Player Settings 中的 Other Settings 中將 Allow ‘unsafe’ Code 選項勾選上,可用于修飾函數、代碼塊、成員變量、類 | 1. 勾選 Allow ‘unsafe’ Code 選項后可使用 unsafe 關鍵詞2. 可修飾函數、代碼塊、成員變量、類 |
unsafe 關鍵詞(總結) | C# 語言特性 | unsafe 的使用能讓在 C# 中使用指針,但存在安全風險和穩定性風險,無特殊需求盡量避免使用 | 盡量避免在 C# 中使用 unsafe 關鍵詞,以減少安全和穩定性風險 |
7.OtherSettings-優化和堆棧跟蹤
設置項 | 分類 | 描述 | 可選值及說明 |
---|---|---|---|
Prebake Collision Meshes(預烘焙碰撞到網格) | 優化 | 在構建時將碰撞數據添加到網格 | 啟用:在構建時添加碰撞數據到網格 不啟用:不進行此操作 |
Keep Loaded Shaders Alive(保持加載的著色器的活動狀態) | 優化 | 啟動后,著色器不能卸載,避免卸載后重復加載造成性能開銷和卡頓 | 啟用:不能卸載著色器 不啟用:可以卸載著色器 |
Preloaded Assets(預裝資源) | 優化 | 設置啟動時加載的資源數組,將想要預加載的內容拖入框中 | 可將需要預加載的資源拖入設置框中 |
Strip Engine Code(剝離引擎代碼) | 優化 | 選擇IL2CPP模式才會出現的字段,啟用可刪除Unity引擎功能中沒有使用的代碼,減小包體大小 | 啟用:刪除未使用的引擎代碼,減小包體 不啟用:不進行代碼剝離 |
Managed Stripping Level(管理剝離水平) | 優化 | 選擇Unity如何剝離未使用的C#代碼,發布時自動去除未使用代碼,可能意外刪除需要的代碼 | 1. Disabled:不剝離,只有在Mono模式下才能選擇 2. Minimal:最小剝離,Unity 只會搜索Unity引擎未使用的.Net類庫,不刪除用戶編寫代碼,IL2CPP模式下默認 3. Low:低級剝離,處理Unity相關,玩家自己編寫的代碼也會被剝離,盡量減小意外剝離 4. Medium:中級剝離,比Low更多一些剝離 5. High:高級剝離,優先考慮打包大小,最大限度剝離代碼,可配合link.xml手動拒絕剝離,或使用[Preserve]特性(在不希望被剝離的函數前加該特性) |
Enable Internal Profiler(啟用內部探查器) | 優化 | 已棄用的功能,用于從Android SDK的設備中獲取profiler數據adblogcat測試項目時輸出,僅在開發版本中可用 | 該功能已棄用 |
Vertex Compression(頂點壓縮) | 優化 | 選擇要設置的通道,以便在頂點壓縮方法下壓縮網格,減少內存中網格數據的大小,提高CPU性能 | 選擇相應的通道進行頂點壓縮設置 |
Optimize Mesh Data(優化網格數據) | 優化 | 啟用后,構建時會從使用的網格中剝離未使用的頂點屬性,減少網格數量,減小包體大小,減小加載時間和運行時內存使用,但運行時不能更改材質或著色器相關設置 | 啟用:構建時剝離未使用的頂點屬性 不啟用:不進行此操作,運行時可自由更改材質或著色器設置 |
Texture MipMap Stripping(貼圖紋理剝離) | 優化 | 啟用后會啟用紋理貼圖剝離,在構建時會從紋理中剝離沒有使用的紋理貼圖,根據發布平臺的質量設置確定哪些貼圖用不到,mipmap生成的多分辨率圖也會被剝離 | 啟用:進行紋理貼圖剝離 不啟用:不進行此操作 |
StackTrace(堆棧跟蹤) | 優化 | 選擇在特定的上下文中允許的日志記錄類型和日志記錄的方式 | 日志記錄類型: 1. Error:錯誤信息 2. Assert:斷言(用于檢測非法情況的)信息 3. Warning:警告信息 4. Log:打印日志信息 5. Exception:異常信息 日志記錄方式: 1. None:不記錄 2. ScriptOnly:只在運行腳本時記錄信息 3. Full:一直記錄 |
Clamp BlendShapes(Deprecated)(鉗制混合形狀權重的范圍) | 優化 | 啟用骨骼蒙皮動畫中鉗制混合形狀權重的范圍,已棄用 | 該功能已棄用 |
8.PublishingSettings-KeystoreManager
設置項 | 分類 | 描述 | 可選值及說明 |
---|---|---|---|
Android 中的簽名 | 發布設置準備知識 | Android 要求所有已安裝應用程序使用數字證書做數字簽名,數字證書私鑰由開發者持有,用于標示應用程序作者并建立信任關系,證書可自制,未正確簽名應用無法安裝或運行 | 數字證書私鑰由開發者持有,可使用自制簽名證書,無正確簽名應用在 Android 系統(模擬器或真實設備)無法安裝運行 |
Android 應用程序清單(AndroidManifest.xml) | 發布設置準備知識 | Android 應用程序工程中的 xml 文件,用于聲明應用程序組件,確定用戶權限、最低 API 級別,聲明硬件和軟件特性等,引入 Android 第三方 SDK 或與 Android 交互時需編輯,無需求可忽略 | 聲明應用程序組件、確定用戶權限(如網絡、通訊錄、信息讀取等)、聲明最低 API 級別、聲明硬件和軟件特性(如攝像頭、藍牙、多點觸碰等) |
Gradle | 發布設置準備知識 | 一個自動化構建開源工具,基于 JVM,主要面向 Java 應用,也支持其他語言,可用于 Android 項目構建,使項目更簡潔,在 Unity 中用于打包安卓應用程序,Android Studio 也使用它打包 | 基于 JVM 的自動化構建工具,用于 Android 項目構建,幫助打包安卓應用程序 |
ProGuard | 發布設置準備知識 | 一個壓縮、優化和混淆 Java 字節碼文件的免費工具,可刪除無用內容、優化字節碼、重命名類等,常用于 Android 開發混淆項目,增加反編譯難度,Unity 發布安卓應用默認使用 | 壓縮、優化和混淆 Java 字節碼文件,刪除無用類、字段、方法和屬性,刪除注釋,重命名類、字段等 |
R8 | 發布設置準備知識 | 相對 ProGuard 較新的 Android 混淆編譯器,可減小應用大小,Android Gradle 3.4.0 或更高版本構建項目不再使用 ProGuard 優化,Android Sutdio 3.3 版本開始用它做代碼壓縮器,比 ProGuard 縮減代碼更快、輸出大小更優,Unity 發布安卓應用可選擇使用 | 較新的 Android 混淆編譯器,減小應用大小,在特定版本 Android 構建項目中替代 ProGuard,縮減代碼更快、輸出更優 |
密鑰管理器 | 發布設置 | 可通過密鑰管理器創建、配置和加載密鑰和密鑰庫,可在 Keystore Manager 窗口或 Publishing Settings 發布設置中加載現有密鑰庫和密鑰 | - |
下拉菜單(密鑰管理器) | 發布設置 | 在該下拉菜單選擇創建新的密鑰庫或加載現有的密鑰庫 | 1. Create New:創建新的密鑰庫 - Anywhere:打開項目文件夾根目錄下的文件資源管理器,是 Unity 存儲密鑰庫的默認位置 - In Dedicated Location:將密鑰庫文件保存到計算機中的另一個目錄中,為協同開發方便,建議保存在項目文件夾下 2. Select Existing:選擇現有密鑰庫,可指定加載現有密鑰庫 |
Password(密鑰庫的密碼) | 發布設置 | 密鑰庫的密碼 | 設置密鑰庫密碼 |
Confirm password(創建密鑰庫時需要重復一次密碼) | 發布設置 | 創建密鑰庫時重復輸入密碼以確認 | 重復輸入密碼與 Password 一致 |
Existing Keys(現有密鑰) | 發布設置 | 界面中包含當前密鑰庫包含的密鑰的只讀列表 | 顯示當前密鑰庫中密鑰的只讀信息 |
New Key Values(新鍵值) | 發布設置 | 可在此處在密鑰庫中添加密鑰 | 1. Alias:密鑰的標識名字,一般分不同廠商,如 huawei、xiaomi 2. Password:密鑰的密碼 3. Confirm password:密鑰的確認密碼,必須和密碼相同 4. Validity(years):有效期(年),默認有效期為 50 年,一般設置較大值,可理解為管理應用程序的有效時間 5. First and Last Name:名字和姓氏 6. Organizational Unit:所在企業中的部門 7. Organization:組織,管理應用程序的組織,一般為公司名 8. City Or Locality:個人所在的城市或地區 9. State or Province:個人所在的州或省 10. Country Code(XX):個人的國家代碼,中國的國家代碼為 86 |
9.PublishingSettings-其他
項目密鑰庫
項目密鑰庫是用來保存簽名密鑰,以保障應用程序安全性的容器。若要加載并使用現有的密鑰庫,需進行以下操作:
- 啟動 Custom Keystore。
- 在 Select 下拉列表里選 Browse,從文件系統挑選密鑰庫。
- 輸入密鑰庫密碼。
相關設置說明
設置項 | 描述 |
---|---|
Custom Keystore | 啟用后,能夠指定加載和使用現有的密鑰庫 |
Select | 啟用 Custom Keystore 后,可通過此按鈕選擇要使用的密鑰庫 |
Path | 顯示所選密鑰庫所在的路徑 |
Password | 輸入用于加載所選密鑰庫的密碼 |
Project Key | 加載密鑰庫后,Unity 會加載庫中的全部密鑰。可在此設置從該密鑰庫中選擇哪一個密鑰作為項目的活動密鑰 |
Alias | 選擇用于打開項目的密鑰 |
Password(項目密鑰密碼) | 輸入所選密鑰的密碼 |
構建相關
默認情況下,Unity 采用安裝時提供的清單文件、Gradle 模板和文件來構建應用程序。若要進行自定義,需啟用 Build 下方的復選框,此時文件會出現在復選框下方,接著打開新文件進行修改,保存修改后的文件,Unity 下次構建應用程序時就會自動使用這些文件。
設置項 | 描述 |
---|---|
Custom Main Manifest | 這是一個 xml 文件,可在此決定權限設置,還能設置是否啟用某些安卓功能等 |
Custom Launcher Manifest | 同樣是 xml 文件,可在此決定應用程序啟動前的外觀和行為 |
Custom Main Gradle Template | Gradle 是一個構建系統,能自動執行許多構建過程并避免常見的構建錯誤,Unity 對所有 Android 版本都使用 Gradle |
Custom Launcher Gradle Template | 這是一個 gradle 文件,包含了構建 Android 應用程序的相關說明 |
Custom Base Gradle Template | 是一個 gradle 文件,包含了所有其他模板和 Gradle 項目間的共享配置 |
Custom Gradle Properties Template | 屬于屬性文件,包含了 Gradle 生成環境的配置設置 |
Custom Proguard File | 是一個 txt 文件,包含了縮小過程的配置設置 |
代碼混淆和縮小相關
Minify 是對應用程序代碼進行縮減、混淆和優化的過程,能減小代碼大小并增加反編譯難度。使用 Minify 設置可確定 Unity 何時以及如何將縮小應用于構建。不過使用該功能會延長發布時間,還會使調試變得復雜,所以通常在最終發布時才使用,平時發布測試應用時無需開啟。
設置項 | 描述 |
---|---|
Use R8 | 默認情況下,Unity 使用 Proguard 進行縮小。啟用此復選框可改用 R8 |
Release | 若希望 Unity 在發布構建時縮小應用程序的代碼,需啟用此復選框 |
Debug | 若希望 Unity 在調試構建時縮小應用程序的代碼,需啟用此復選框 |
拆分應用程序二進制文件
啟用 Split Application Binary 選項,可將輸出包拆分為主包 (APK) 和擴展包 (OBB) 包。若要發布大于 100 MB 的應用程序,Google Play 應用商店要求使用此功能。
三、交互項目創建
1.Unity調用安卓
操作類型 | 方法調用格式 | 描述 |
---|---|---|
成員變量獲取 | androidJavaObject.Get<變量類型>("變量名") | 用于獲取 Android Java 對象的成員變量 |
成員變量賦值 | androidJavaObject.Set<變量類型>("變量名", 值) | 用于給 Android Java 對象的成員變量賦值 |
靜態變量獲取 | androidJavaObject.GetStatic<變量類型>("變量名") | 用于獲取 Android Java 對象的靜態變量 |
靜態變量賦值 | androidJavaObject.SetStatic<變量類型>("變量名", 值) | 用于給 Android Java 對象的靜態變量賦值 |
無返回值成員函數調用 | androidJavaObject.Call("函數名", 參數) | 調用 Android Java 對象的無返回值成員函數 |
有返回值成員函數調用 | androidJavaObject.Call<返回值類型>("函數名", 參數) | 調用 Android Java 對象的有返回值成員函數 |
無返回值靜態函數調用 | androidJavaObject.CallStatic("函數名", 參數) | 調用 Android Java 對象的無返回值靜態函數 |
有返回值靜態函數調用 | androidJavaObject.CallStatic<返回值類型>("函數名", 參數) | 調用 Android Java 對象的有返回值靜態函數 |
代碼示例:
androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");btnOpenAndroidActivity.onClick.AddListener((() =>{androidJavaObject.Call("OpenActivity");}));
2.安卓調用Unity
Android調用Unity規則
- 需要寫在繼承MonoBehaviour的腳本中。
- 需要掛載在場景中處于激活狀態的GameObject上。
- 交互時,在Android端調用API:
調用方法:UnityPlayer.UnitySendMessage("對象名", "函數名", "參數信息")
注意:該API中的參數只能是String類型或者為null
3.Android開發的必備原理
(1)Android應用程序的基本構成
Android SDK:為開發Android應用程序提供了各種各樣的API和工具,是進行Android開發的基礎支撐,它包含了豐富的開發資源。
編程語言:主要使用Java或者Kotlin語言進行開發,這兩種語言都提供了大量豐富的庫和API,開發者可以利用這些來實現應用的各種功能。
XML配置文件:在Android應用程序中,XML用于定義UI布局、樣式以及資源信息等。它承擔著界面和資源相關的配置工作,使得開發者能夠設計出不同的用戶界面。
- 應用程序組件:Android應用程序由以下四種組件組成:
- Activity(活動):主要用于實現用戶界面,代表著一個屏幕或窗口,其中包含了各種UI組件,如按鈕、文本、輸入框等,是用戶與應用進行交互的主要界面載體。
- Service(服務):是一種可以在后臺執行長時間運行操作的組件,沒有用戶界面,通常用于處理和交互無關的邏輯,例如上傳、下載、音樂播放等后臺任務。
- Broadcast Receiver(廣播接收器):主要負責接收系統或者其他應用程序發出的廣播消息。這些消息可以來自系統事件,比如網絡連接變化、設備啟動等,也可以來自其它應用程序。
- Content Provider(內容提供程序):用于管理應用程序數據,既可以讓其它應用程序或系統訪問本應用中的數據,也能讓本應用訪問其它應用或系統的數據,例如用于存儲應用程序的圖片、音頻、視頻等數據。
在開發Android應用程序時,主要是編寫基于這四種組件的邏輯。日常開發中,更多的是利用Android SDK中的API開發Activity活動組件,類似于游戲中UI界面邏輯開發。只有在有其他后臺或者拓展功能需求時,才會使用其它三種組件。
(2)AndroidManifest.xml文件的作用
AndroidManifest.xml是Android應用程序的應用清單文件,每個應用程序都必須包含一個,并且文件名必須是AndroidManifest.xml。該文件中包含了應用程序的配置信息,Android系統會根據這些配置來運行應用程序。
以下是該文件中包含的重要信息:
應用程序組件信息:包含應用程序的四大組件(Activity、Service、Broadcast Receiver、Content Provider)的相關內容。
應用程序權限:如存儲權限、互聯網訪問權限等等,通過這些權限聲明,應用才能在系統中獲得相應的操作許可。
應用程序元數據:包括程序名稱、版本號、圖標、包名等等,這些信息用于標識和描述應用程序。
應用程序啟動信息:指定默認啟動哪一個Activity,決定了應用啟動時呈現給用戶的第一個界面。
(3)常用標簽作用
manifest標簽:作為文件的根標簽,主要包含包名、版本號等信息,是整個應用配置的基礎。
uses-permission標簽:用于聲明應用程序所需的權限,例如存儲權限、網絡訪問權限等,明確應用在系統中可以執行的操作。
application標簽:應用程序的各組件都包含在其中,并且還可以配置一些圖標、文本、樣式等信息,是應用組件的容器。
activity標簽:用于描述Activity組件的具體信息,包括其屬性和相關配置。
meta-data標簽:為Activity提供元數據,這些數據可以通過API獲取,為Activity添加額外的信息。
intent-filter標簽:為組件聲明意圖(intent),其中包含action(意圖類型)和category(意圖類別)兩個子標簽,用于定義組件的意圖匹配規則,決定組件在何種情況下被激活。
4.交互項目創建
-
Unity項目:創建項目后切換到Android平臺,設置包名和Android版本。
-
Android Studio項目:選擇Phone and Tablet,創建Empty Activity項目。確保包名和Minimum SDK版本與Unity項目一致,若版本缺失,在Android Studio中下載。創建完成后,刪除工程里兩個Test項目和res下的無用資源。
-
build.gradle文件:在Android Studio的Project頁簽切換到Project視圖,展開app頁簽,打開build.gradle文件。將
id 'com.android.application'
改為id 'com.android.library'
,刪除defaultConfig
中的applicationId
項,點擊右上角“Sync Now”同步。 -
導入classes.jar包:從
Unity安裝目錄\Data\PlaybackEngines\AndroidPlayer\Variations\mono(il2cpp)\Release\Classes
路徑拷貝包到Android Studio的app\libs
下,選中包右鍵點擊“Add As Library”。 -
導入UnityPlayerActivity腳本:將
Unity安裝目錄/Data/PlaybackEngines/AndroidPlayer/Source/…
路徑下的文件夾拷貝到Android Studio的app/src/main/java
中。 -
修改MainActivity腳本:讓其繼承
UnityPlayerActivity
,注釋onCreate
函數里的setContentView
代碼。
-
修改AndroidManifest.xml配置文件:刪除
application
中的無用內容,在activity
里添加<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
。
8.選中 MainActivity
腳本,通過工具欄“Build” -> “Make Moudle …” 生成Unity用的aar包。若打包時出現下載提示,等待下載完成即可構建成功。
9.將生成的aar包導入Unity。