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();
}
}
|
來源: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開發工程師學習筆記(2):Tomcat
目錄結構: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互聯網輕量級框架整合開發(書籍)閱讀筆記(2):SSM+Redis概念理解
重復 技術 理解 size 從數據 一個 ron bat 互聯網 一、SSM+Redis的結構圖 在Java互聯網中,以Spring+SpringMVC+MyBatis(SSM)作為主流框架,SSM+Redis的結構圖如下: 二、下面介紹它們各自承擔的功能: 1.S
前端與移動開發之vue-day1(2)
Vue指令之v-on的縮寫和事件修飾符事件修飾符:.stop 阻止冒泡.prevent 阻止預設事件.capture 新增事件偵聽器時使用事件捕獲模式.self 只當事件在該元素本身(比如不是子元素)觸發時觸發回撥.once 事件只觸發一次 Vue指令之v-model和雙向資料繫結簡易計算器案例HTML 程
前端與移動開發之vue-day2(2)
全域性過濾器 // 定義一個全域性過濾器 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-day5(2)
實現webpack的實時打包構建 由於每次重新修改程式碼之後,都需要手動執行webpack打包的命令,比較麻煩,所以使用webpack-dev-server來實現程式碼實時打包編譯,當修改程式碼之後,會自動進行打包構建。 執行cnpm i webpack-dev-server --save-dev安
前端與移動開發之vue-day4(2)
什麼是路由 後端路由:對於普通的網站,所有的超連結都是URL地址,所有的URL地址都對應伺服器上對應的資源; 前端路由:對於單頁面應用程式來說,主要通過URL中的hash(#號)來實現不同頁面之間的切換,同時,hash有一個特點:HTTP請求中不會包含hash相關的內容;所以,單頁面程式中的頁面跳轉
前端與移動開發之vue-day3(2)
【重點】為什麼元件中的data屬性必須定義為一個方法並返回一個物件 通過計數器案例演示 使用components屬性定義區域性子元件 元件例項定義方式: <script> // 建立 Vue 例項,得到 ViewModel var vm = new Vue({
前端與移動開發之vue-day6(2)
在使用webpack構建的Vue專案中使用模板物件?在webpack.config.js中新增resolve屬性: resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js' } } ES6中語法使用總結使用 export defau
百度地圖二次開發——建立Hello World(2)
準備頁面 根據HTML標準,每一份HTML文件都應該宣告正確的文件型別,我們建議您使用最新的符合HTML5規範的文件宣告: <!DOCTYPE html> 適應移動端頁面展示 下面我們新增一個meta標籤,以便使您的頁面更好的在移動平臺上展示。 <me