1. 程式人生 > >Unity開發安卓遊戲(2):基於安卓遊戲的優化方案總結!

Unity開發安卓遊戲(2):基於安卓遊戲的優化方案總結!

最近專案進入收尾階段,之前對專案做了很多優化,mesh合併 ,減少DrawCall和模型骨骼以及物理計算,合併材質球,優化程式碼等等,在IOS上還好,但是Android上,試過幾款手機,從低端到高階,發現效能還是很差,所以又花了幾天來研究摸索,終於把遊戲效能搞定。記錄下來,留作以後參考。

1. 更新不透明貼圖的壓縮格式為ETC 4bit,因為android市場的手機中的GPU有多種,每家的GPU支援不同的壓縮格式,但他們都相容ETC格式,
2. 對於透明貼圖,我們只能選擇RGBA 16bit 或者RGBA 32bit。
3. 減少FPS,在ProjectSetting-> Quality中的VSync Count 引數會影響你的FPS,EveryVBlank相當於FPS=60,EverySecondVBlank = 30;
這兩種情況都不符合遊戲的FPS的話,我們需要手動調整FPS,首先關閉垂直同步這個功能,然後在程式碼的Awake方法裡手動設定FPS(Application.targetFrameRate = 45;)
   降低FPS的好處:
 1)省電,減少手機發熱的情況;
 2)能都穩定遊戲FPS,減少出現卡頓的情況。
4. 當我們設定了FPS後,再調整下Fixed timestep這個引數,這個引數在ProjectSetting->Time中,目的是減少物理計算的次數,來提高遊戲效能。

5. 儘量少使用Update LateUpdate FixedUpdate,這樣也可以提升效能和節省電量。多使用事件(不是SendMessage,使用自己寫的,或者C#中的事件委託)。

6. 待機時,調整遊戲的FPS為1,節省電量。

來源:http://hi.baidu.com/tinggu_android/item/6ad1725ddff20b908c12ed56

誤區1:效能優化只是程式設計師的責任,與美術和策劃無關。

-技術美術和關卡設計師對於遊戲效能承擔著非常重要的責任

-程式設計師往往無法補救由於濫用美術資源而造成的效能問題

誤區2:在制定了嚴格的美術規範之後,美術師就應該對一切美術問題負責,程式設計師不再與此有關

-程式設計師應該為美術師實現完整的美術資源合法性檢查工具

-Tools speak louder than rules!

誤區3:對於程式而言,效能優化應該從GPU/Shader的執行效率入手

-針對CPU端/遊戲邏輯的效能優化往往能夠取得更大的作用

-GPU/Shader的效能優化應該放在最後進行

這裡推薦使用一個優化工具BulidReqort

上面會顯示很詳細的資源所佔大小

下面說說對於一些資源的優化

圖片:

JPG圖片

一般採用自動壓縮要是大小還不滿足要求那麼就把紋理max size 設定小一些;

png圖片:

一般不是要求特別高清的可以使用rgba 16這個完全滿足要求  比rgba32小一般  記憶體開銷也是小一半的

音樂:

音樂一般採用修改取樣率的辦法來壓縮 修改取樣率為128就夠了

然後作為 2d遊戲吧所有音樂都改為單聲道小一半

模型的話一半都是圖片比較大把圖片按照上面的改下就好

最後附上一個修改unity匯入後圖片格式的程式碼

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 using UnityEngine; using System.Collections; using UnityEditor; public class SetAssetPostprocessor : AssetPostprocessor { void OnPostprocessTexture(Texture2D texture) { string path = assetPath.ToLower(); if(path == null ||path == "") { return; } TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter; if(textureImporter == null) { return; } textureImporter.textureType = TextureImporterType.Advanced; textureImporter.isReadable = true; textureImporter.mipmapEnabled = false; if (path.EndsWith(".jpg")) { textureImporter.npotScale = TextureImporterNPOTScale.ToNearest; textureImporter.maxTextureSize = 2048; textureImporter.textureFormat = TextureImporterFormat.AutomaticCompressed; } else { textureImporter.maxTextureSize = 2048; textureImporter.npotScale = TextureImporterNPOTScale.ToNearest; textureImporter.textureFormat = TextureImporterFormat.RGBA16; } AssetDatabase.Refresh(); } }
音樂也可以用上面的程式碼處理  需要把指令碼放在Editor資料夾下。

來源:http://unity3d.9tech.cn/news/2013/1216/39206.html

還有一個是聖典上的,貼出地址:http://game.ceeger.com/search.phpkeyboard=%E6%89%8B%E6%9C%BA%E4%BC%98%E5%8C%96

大家感興趣可以看看!

相關推薦

Unity開發遊戲2基於遊戲優化方案總結

最近專案進入收尾階段,之前對專案做了很多優化,mesh合併 ,減少DrawCall和模型骨骼以及物理計算,合併材質球,優化程式碼等等,在IOS上還好,但是Android上,試過幾款手機,從低端到高階,發現效能還是很差,所以又花了幾天來研究摸索,終於把遊戲效能搞定。記錄下來,留作以後參考。 1. 更新不透

C#撲克牌遊戲2給CardLib新增Cards集合

(一):背景         在上一篇文章中,我們簡單建立了幾個可能在後面會用到的類並且放到了一個類庫中,接下來需要對這幾個類進行進一步的思考。首先一個問題是,我們原先在Deck類中,使用了一個數組來代表一副牌,但是我們知道,在一個撲克牌遊戲中,(例如鬥地

網易微專業——Java Web開發工程師學習筆記2Tomcat

目錄結構:bin:可執行檔案conf:配置檔案lib:Tomcat依賴庫temp:臨時資料夾webapps:預設的應用部署目錄work:供web應用使用bin:啟動指令碼通過改變環境變數JAVA_OPTS,常見啟動引數-server -Xms512m -Xmx512mserv

一個玩遊戲的失足青年,轉行做軟體開發的掙扎過程2

相親脫單記 話說之前被父母迫切去相親,前兩次都失敗告終,其實那時我一是確實沒放在心上,每次都是應付了事;二是我有一個致命的心病,我在剛工作一年時體檢發現有乙肝。 回到我剛開始工作的第二年,公司是包一日三頓伙食,當時沒有996的概念,反正幹累了就回去睡覺。 因為公司有一半的是客服人員,是24小時線上,兩班倒。

Unity引擎入門——製作第一個2D遊戲2角色移動與動畫

在上一節的內容裡,我們已經創建出了一個主角,也搭建了一個簡單的場景。 傳送門:https://www.cnblogs.com/zny0222/p/12653088.html 既然有了主角,要怎樣才能讓主角動起來呢? 這時候我們就需要寫一些簡單的程式碼,來控制我們人物的移動。 如圖所示,我們新建一個資料夾,用

Windows Phone開發2豎立自信,初試鋒茫

一鍵 優秀 保持 知識 sdn ant emulator 一個 動畫 上一篇文章中,我們聊了一些“大炮”話題,從這篇文章開始,我們一起來學習WP開發吧。 一、我們有哪些裝備。 安裝完VS 學習版 for WP後,也連同SDK一並安裝了,不必像安卓那樣,安裝JDK,下載

Python開發環境2啟動Eclipse時檢測到PYTHONPATH發生改變

工程 新的 “.” ase 窗口 什麽 程序 apply pri OS:Windows 10家庭中文版,Eclipse:Oxygen.1a Release (4.7.1a),PyDev:6.3.2 4月25日,在Eclipse上安裝了PyDev(前面博文有記錄),並開發

Qt與FFmpeg聯合開發指南——編碼2完善功能和基礎封裝

v_op buffer 目前 front from 幀率 inter 博客 int 上一章我用一個demo函數演示了基於Qt的音視頻采集到編碼的完整流程,最後經過測試我們也發現了代碼中存在的問題。本章我們就先處理幾個遺留問題,再對代碼進行完善,最後把編碼功能做基礎封裝。 一

路飛學城——python開發集訓——第二章2練習題

創建 用戶 oldboy second python pda 全部 input 列表 一: 本節學習心得與體會 體會到了編程就得,多練習,列表字典集合這些知識雖然簡單,但練習題做起來還是有點磕磕絆絆的。 加深了幾個重要的知識點的使用,譬如,在索引裏用索引names

JavaEE互聯網輕量級框架整合開發書籍閱讀筆記2SSM+Redis概念理解

重復 技術 理解 size 從數據 一個 ron bat 互聯網 一、SSM+Redis的結構圖 在Java互聯網中,以Spring+SpringMVC+MyBatis(SSM)作為主流框架,SSM+Redis的結構圖如下: 二、下面介紹它們各自承擔的功能: 1.S

前端與移動開發之vue-day12

Vue指令之v-on的縮寫和事件修飾符事件修飾符:.stop 阻止冒泡.prevent 阻止預設事件.capture 新增事件偵聽器時使用事件捕獲模式.self 只當事件在該元素本身(比如不是子元素)觸發時觸發回撥.once 事件只觸發一次 Vue指令之v-model和雙向資料繫結簡易計算器案例HTML 程

前端與移動開發之vue-day22

全域性過濾器 // 定義一個全域性過濾器 Vue.filter('dataFormat', function (input, pattern = '') { var dt = new Date(input); // 獲取年月日 var y = dt.getFullYear(); v

打地鼠遊戲2之定義地鼠函數及函數原型 prototype

mouse cli function orm style img 重置 ati null 在JavaScript中,prototype對象是實現面向對象的一個重要機制。 每個函數就是一個對象(Function),函數對象都有一個子對象 prototype對象,類是以函數的形

Android開發2資料儲存之一SharedPrefrences和檔案讀寫

一、資料儲存 本文主要講前兩種儲存方式,其中檔案讀寫只記錄Internal Storage方式 1. SharedPrefrences方式 輕量級NVP方式儲存,以XML的檔案方式儲存,適合少量資料的儲存。 NVP:Name/Value pair, 名稱/值 對。 2.

iOS開發簡記2自定義tabbar

tabbar是放在APP底部的控制元件。常見的APP都使用tabbar來進行功能分類的管理,比如微信、QQ等等。 小程需要一個特殊一點的tabbar,要求突顯中間的那個按鈕,讓中間按鈕特別顯眼,從而引導使用者去點選。 所以,讓中間按鈕大於兩邊的按鈕,是一個基本的要求。 使用常規的UITabBar跟UIT

前端與移動開發之vue-day52

實現webpack的實時打包構建 由於每次重新修改程式碼之後,都需要手動執行webpack打包的命令,比較麻煩,所以使用webpack-dev-server來實現程式碼實時打包編譯,當修改程式碼之後,會自動進行打包構建。 執行cnpm i webpack-dev-server --save-dev安

前端與移動開發之vue-day42

什麼是路由 後端路由:對於普通的網站,所有的超連結都是URL地址,所有的URL地址都對應伺服器上對應的資源; 前端路由:對於單頁面應用程式來說,主要通過URL中的hash(#號)來實現不同頁面之間的切換,同時,hash有一個特點:HTTP請求中不會包含hash相關的內容;所以,單頁面程式中的頁面跳轉

前端與移動開發之vue-day32

【重點】為什麼元件中的data屬性必須定義為一個方法並返回一個物件 通過計數器案例演示 使用components屬性定義區域性子元件 元件例項定義方式: <script> // 建立 Vue 例項,得到 ViewModel var vm = new Vue({

前端與移動開發之vue-day62

在使用webpack構建的Vue專案中使用模板物件?在webpack.config.js中新增resolve屬性: resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js' } } ES6中語法使用總結使用 export defau

百度地圖二次開發——建立Hello World2

準備頁面 根據HTML標準,每一份HTML文件都應該宣告正確的文件型別,我們建議您使用最新的符合HTML5規範的文件宣告: <!DOCTYPE html> 適應移動端頁面展示 下面我們新增一個meta標籤,以便使您的頁面更好的在移動平臺上展示。 <me