1. 程式人生 > >unity unity專案開發過程經驗摘要(轉)

unity unity專案開發過程經驗摘要(轉)

網路層:短連結+長連線 
兩者的資料同步可以考慮通過資料庫層來處理,短連線處理業務邏輯,長連線處理資料同步以及一些後臺邏輯。當然只使用短連線的情況下,可以制定一種動態資料的攜帶機制,滿足隨時在任何協議中攜帶常用的各類資料,保證資料的一致,再者建議前端儘可能少的修改自己來源於伺服器的快取資料,寧願多定義一些中間變數,多做一些邏輯。   

伺服器和客戶端統一資料結構: 
通過策劃定義的excel表,一鍵匯出java c# proto檔案,通過在excel表中新增標註來確定哪些引數是公用資料(傳輸),哪些是客戶端專用哪些是伺服器專用 
另外:客戶端一定要儘量少的做比較重要邏輯的條件判斷,儘量少的使用公式計算,如果可能的話,直接由策劃提供對應公式計算後的數值,或者資料儘可能的由後端傳過來。 再者不同協議儘可能使用公用的結構體,這樣可以減少對快取資料操作的地方,也就可以減少出錯的地方。 
還有一點,要多做異常錯誤碼的處理,可以在這裡進行一些前端與後端資料的同步工作。  
儘量使用靜態表的方式來獲取各類資料,因為策劃會在線上服進行一定程度的數值調整,千萬不要寫死在程式裡面,當前我們進擊的魔王走的是靜態表,同時支援靜態表的動態更新,這樣可以滿足策劃對資料表的隨時修改,可以將靜態表都拆分成個體單獨處理,每個表都有自己的版本號,減少下載量。由一個總的資訊記錄檔案來控制(這個檔案每次必須從伺服器獲取最新),記錄當前版本,下載地址等等,當然如果整體大小很小的話,那麼也可以合併成一個檔案,減少更新請求次數。   

資源處理:打包成bundle是必須的,考慮是否將介面資源也打包,或者生成為場景資源,打包公用資源,打包單體介面資源,按照順序下載資源,處理資源 (這一條根據需求,如果邏輯合理的話可以減少資源量,不過會加重邏輯工作量),同時如果使用Bundle的話一定得保證檔名的唯一性,因為WWW是使用檔名來進行區分下載的。合理拆分AssetBundle。 資源分類:場景、角色、介面、靜態表、動畫、特效、其他  
//檔名, 版本號(修改時間), 檔案尺寸 md5(crc32) 下載地址(BaseURL+Platform+Resource) 
使用WWW.LoadFromCacheOrDownload的方法,下載完的資料將在unity3d的本地快取目錄中進行儲存。Web瀏覽器通常允許快取大小達到50MB,PC和MAC的本地應用,IOS和Android應用都允許快取達到4GB大小 
在Unity4.3.3中可以使用CRC32進行檔案正確性校驗,CRC32為32bit的簡單hash,MD5為128bit較複雜的hash演算法,根據網上的資料,雖然CRC32在某些情況不是一定比MD5快,但是有Unity3D內建的介面,同時如果我們使用MD5會增加自己的工作量,那麼還是建議使用CRC的校驗方式。 
另外現在可以不用再考慮使用WWW.Dispose來清空程序,釋放資源了,一是這東西不保險,可能會造成崩潰(在下載完成之後呼叫沒問題,在下載中頻繁呼叫可能會出現異常),二是Unity自己會在合適的時機清空載入程序。  

保持良好的編碼: 
專案開發中一定要保證委託使用的一致性(Observer pattern),一定不要某些模組使用,另外的模組又不使用,造成程式碼比較散亂。 其次堅持統一的本地化語言開發機制,對於介面佈局的問題在程式碼中儘量不要使用寫死的數值來調整位置,不要因為前期偷懶造成後期修改成本的增加,畢竟在前期開發中對個人負責的功能更加清晰。 

優化託管的堆記憶體:儘可能早的時間將不需要的引用去除掉,置為null,這樣回收機制才能正確地及時的把不需要的記憶體清理出來(理論上) 

優化Unity記憶體:避免程式記憶體峰值,在載入兩個大場景時,中間最好穿插一個很小的場景,這樣在場景切換過程中不再使用的資源將會被適當釋放一部分,二是要注意指令碼中對一些資源Prefab、GameObject等引用,如果一些不會被刪除的指令碼包含了對大量資源的引用,那麼這部分資源將不會被釋放。  

統一計時功能,根據需求分發到使用者,C#的話最好使用Ticks來計時,比較精確一點,不管使用Ticks或者second,一定要保證各處使用單位一致,同時保證使用Unity的Time. realtimeSinceStartup來記錄程式中與真實時間掛鉤的變數,而不是使用Time.deltaTime   
協議碼的處理:建議使用C#的反射機制來處理,拋棄switch的編寫,利用C#的partial功能將檔案按模組或者功能分離程式碼檔案。  

3D美術效果:比較合理的美術規範,適用於自身專案,適用於移動端的shader  

介面佈局:堅持九宮格的佈局,介面統一動畫的處理,在九宮格的幾個節點掛上相應的動畫指令碼,在Enable和Disable的時候執行正反動畫,覺得我們專案對動畫部分的設計還是很不錯的,效果也比較統一,使用起來也比較簡單。  

介面貼圖的製作:NGUI的圖集合並規則,按照美術風格,規定美術的圖素數量,將可能的圖素合併到1-2張通用大貼圖上,其次按照不同的模組進行單獨生成圖集,這樣可以方便做bundle,進行資源下載等其他功能. 
自定義一些針對性的介面操作工具,圖集修改,深度統計、修改   

效率:儘量減少Instantiate的使用,在合理的情況下使用Cache機制,但同時要控制記憶體的使用 
ScrollList或者ScrollView一定要實現迴圈利用,使用盡可能少的模板進行資料迴圈顯示  

做好介面管理功能,我們專案中沒有統一的介面管理,很容易造成介面該刪除的時候沒有刪除,再加上比較深層的委託使用,和單一事件分發,使得有的模組的邏輯看起來很複雜,很難快速定位邏輯問題。  

任務系統 
新手引導:建議以端遊的製作方式去處理,在開發過程中注意處理好事件遮蔽的邏輯,可以通過遮擋、tag標籤、collider等來進行事件遮蔽,總之一定要滿足不能因為引匯出現異常造成使用者無法繼續遊戲。 

Shader:因為專案中使用的shader型別也不多,但是在三星的I9260上發現角色的效果不正確,經過檢視發現是shader指令碼中有變數沒有初始化造成,v2f o = (v2f)0; I9260使用的CPU是OMAP4470搭載了PowerVR
[email protected]
,有可能是驅動程式或者Unity自身優化造成,但是在iPhone4S上並沒有發現這個問題,所以驅動程式的可能性比較大。結論,儘量都給變數加上初始化。 

Unity自身的Shader Code不支援discard語法,我們是使用AlphaTest + Blend替換的,但是在open gles2.0上又是不支援AlphaTest的,而是通過shader的discard來實現,那麼應該是Unity進行了轉換,有些shader語法需要注意一下。  
其他:注意與伺服器時鐘同步、注意監測網路,注意遊戲切入後臺再切回來的流逝時間處理,前後端的資料同步儘量使用直接賦值的方式,避免加減這種操作,減少邏輯出錯機率。  

自動打包:資源自動打包,安裝包自動打包,減少人為操作,降低出錯機率。 
工程設定:必須採用.Net2.0 Subset,儘量剝離系統庫,採用micro mscorlib,在這種模式下System.Xml System.Security.Cryptography等一些庫無法使用,採取較小的第三方替代 
 
 上線:開服前一定要做一遍checkList,梳理changelog以及需要那些資源,各功能的簡單測試結果單。     
崩潰統計: 
1. 友盟:http://www.umeng.com/analytics_errortype? 2. Crittercism:https://www.crittercism.com/? 3. 
Crashlytics:http://blog.sina.com.cn/s/blog_8c87ba3b0101m1lf.html 

相關推薦

unity unity專案開發過程經驗摘要

網路層:短連結+長連線  兩者的資料同步可以考慮通過資料庫層來處理,短連線處理業務邏輯,長連線處理資料同步以及一些後臺邏輯。當然只使用短連線的情況下,可以制定一種動態資料的攜帶機制,滿足隨時在任何協議中攜帶常用的各類資料,保證資料的一致,再者建議前端儘可能少的修改自己來源於伺服器的快取資料,寧願多定義一些中

專案開發過程注意事項問題

一、資料流過程           在開發過程中一般採用資料請求服務的方式對資料進行接收。資料流程為:資料平臺(集體推送,採用非同步資料進行傳輸),接下來中間開發資料服務(中轉服務),最後推送至前端(app、web),最後在本地進行相應的資料計算

基於MVC4+EasyUI的Web開發框架經驗總結5--使用HTML編輯控件CKEditor和CKFinder

err config 兩個 腳本 web開發 upload asp 正常 初始 http://www.cnblogs.com/wuhuacong/p/3780356.html Web開發上有很多HTML的編輯控件,如CKEditor、kindeditor等等,很多都做的很

基於MVC4+EasyUI的Web開發框架經驗總結2- 使用EasyUI的樹控件構建Web界面

set 應用 get ember trim ase str zab ble http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在用戶體驗和界面設計方面,和Winfor

基於MVC4+EasyUI的Web開發框架經驗總結6--在頁面中應用下拉列表的處理

ica new web開發 don ext images 如果 bob 獲取 http://www.cnblogs.com/wuhuacong/p/3840321.html 在很多Web界面中,我們都可以看到很多下拉列表的元素,有些是固定的,有些是動態的;有些是字典內容,

基於MVC4+EasyUI的Web開發框架經驗總結8--實現Office文檔的預覽

討論 off info code .cn viewer 存在 nco app http://www.cnblogs.com/wuhuacong/p/3871991.html 基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽

基於Metronic的Bootstrap開發框架經驗總結17-- 使用 summernote插件實現HTML文檔的編輯和圖片插入操作

系統 cat 寫入 視頻 編寫 查看 absolute upload form 在很多場合,我們需要在線編輯HTML內容,然後在頁面上或者其他終端上(如小程序、APP應用等)顯示,編輯HTML內容的插件有很多,本篇介紹基於Bootstrap的 summernote插件實現H

基於Metronic的Bootstrap開發框架經驗總結18-- 在代碼生成工具Database2Sharp中集成對Bootstrap-table插件的分頁及排序支持

關註 基礎 表頭 數據 database 一定的 處理 tree的使用 適合 在我們開發系統界面,包括Web和Winform的都一樣,主要的界面就是列表展示主界面,編輯查看界面,以及一些輔助性的如導入界面,選擇界面等,其中列表展示主界面是綜合性的數據展示界面,一般往往需要對

多年iOS開發經驗總結

1、設定UILabel行間距 NSMutableAttributedString* attrString = [[NSMutableAttributedString  alloc] initWithString:label.text];

Java專案開發成績管理系統 學生資訊模組—主介面設定

學生資訊模組負責管理學生的個人資訊,包括對學生人數的增加對資訊的修改等, 1.主介面設計: 學生資訊主介面包含選單欄,列表按鈕,等元件,其實現程式碼如下: package student; import grade.GIndex; import java.awt.*;

Java專案開發成績管理系統 成績資訊模組—主介面設定

主介面和上一篇部落格大致相同,(編寫過程點選上一篇部落格), 效果如下: 程式碼如下: package grade; import course.CIndex; import java.awt.*; import java.awt.event.ActionEven

Java專案開發成績管理系統 成績資訊模組—新增成績資訊

具體實現流程與上一篇部落格(上一篇部落格點選這裡) 程式碼如下: package grade; import java.awt.*; import java.awt.event.ActionEve

Java專案開發成績管理系統 課程資訊模組—新增課程資訊

具體實現流程與上一篇部落格(上一篇部落格點選這裡) 程式碼如下: package course; import java.awt.*; import java.awt.event.ActionEv

企業專案開發--分散式快取memcached3

此文已由作者趙計剛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 3.3、ssmm0-data 結構: 3.3.1、pom.xml  1 <?xml version="1.0" encoding="UTF-8"?> &nb

基於MVC4+EasyUI的Web開發框架經驗總結1-利用jQuery Tags Input 外掛顯示選擇記錄

最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在使用者體驗和介面設計方面,和Winform開發框架保持一致,而在Web上,我主要採用EasyUI的前端介面處理技術,走MVC的技術路線,在重構完善過程中,很多細節花費不少時間進行研究和提煉,一步步走過來,也積累了不

基於Metronic的Bootstrap開發框架經驗總結5--Bootstrap檔案上傳外掛File Input的使用

Bootstrap檔案上傳外掛File Input是一個不錯的檔案上傳控制元件,但是搜尋使用到的案例不多,使用的時候,也是一步一個腳印一樣摸著石頭過河,這個控制元件在介面呈現上,叫我之前使用過的Uploadify 好看一些,功能也強大些,本文主要基於我自己的框架程式碼案例,介紹其中檔案上傳外掛File Inp

基於Metronic的Bootstrap開發框架經驗總結4--Bootstrap圖示的提取和利用

在前面的一篇隨筆《基於Metronic的Bootstrap開發框架經驗總結(1)-框架總覽及選單模組的處理》介紹了選單模組的處理,主要介紹如何動態從資料庫裡面獲取記錄並構建選單列表。其中選單資訊的圖示樣式,也是從資料庫裡面獲取的,因此要求我們能夠動態取得Bootstrap裡面的各種圖示定義了。本篇主要介紹如何

基於Metronic的Bootstrap開發框架經驗總結1-框架總覽及選單模組的處理

最近一直很多事情,部落格停下來好久沒寫了,整理下思路,把最近研究的基於Metronic的Bootstrap開發框架進行經驗的總結出來和大家分享下,同時也記錄自己對Bootstrap開發的學習研究的點點滴滴,希望在開一個《基於MVC4+EasyUI的Web開發框架經驗總結》的系列文章,逐步介紹這個響應式框架的點

基於Metronic的Bootstrap開發框架經驗總結6--對話方塊及提示框的處理和優化

在各種Web開發過程中,對話方塊和提示框的處理是很常見的一種介面處理技術,用得好,可以給使用者很好的頁面體驗,Bootstrap開發也一樣,我們往往在頁面新增、編輯、檢視詳細等介面使用彈出對話方塊層的方式進行顯示資料,刪除則可能使用一個提示確認框,如果操作成功,我們可以使用更豐富的提示框來處理,本篇主要對比說

基於Metronic的Bootstrap開發框架經驗總結2--列表分頁處理和外掛JSTree的使用

在上篇《基於Metronic的Bootstrap開發框架經驗總結(1)-框架總覽及選單模組的處理》介紹了Bootstrap開發框架的一些基礎性概括,包括總體介面效果,以及佈局、選單等內容,本篇繼續這一主題,介紹頁面內容常用到的資料分頁處理,以及Bootstrap外掛JSTree的使用。在資料的介面顯示當中,表