Unity3D U3D開發專案總結

2021-07-08 16:44:05 字數 3555 閱讀 2560

從2月份到現在第乙個u3d專案也基本收工,雖然專案結局不是太好,但總算也是成功賣掉並上線,總結將近10個月的時間大家從端遊轉到手遊或從cocos2轉到u3d的整個開發過程。

1.資源

無疑這是整個專案我覺得做的最差的地方,也是前期最為忽略的地方,猶豫u3d元件式架構的原因和本身資源打包載入的乙個限制,導致後期專案資源非同步載入以及動態更新很難實現。

起初猶豫是專案玩法參考《印第安大冒險》,在匯出它的包檢視了它的結構以及部分實現的**後,發現基本也未作任何資源管理,資源基本上乙個關卡乙個場景的方式組織,所以也就按他的方式,只是簡單的按場景、特效、ui等進行了簡單的劃分。

但是隨著關卡的複雜性的增加,遊戲複雜性的增加,問題也隨之而來。

專案問題以及方案:

(1) 場景載入慢,無法非同步載入

因為沒用ab管理資源,所以很難實現非同步載入,但是場景已經完成到了某種程度,也很難重新設計資源載入方式,所以臨時找了另一種方案。、

a.先將原始資源移動到resources目錄先,這樣的原因是為了在載入場景是預載入紋理、模型等資源,隨之而來的問題便是resources下的目錄中不能保留不需要的資源,否則會一起匯入安裝包,導致安裝包龐大,最後寫了乙個編輯器擴充套件指令碼在打包時候清理掉所有遊戲未引用的資源。方法是找到所有場景以及與之的依賴資源並記錄,找到所有資源在一處記錄的資源,剩餘資源統一刪除。

b.擴充套件乙個編輯器指令碼生成當前場景所有依賴資源列表,生成預載入檔案,在載入檔案時讀取並通過resource.load載入並儲存,切換時候在釋放。為了實現模擬非同步載入的效果,載入時在乙個新的協程中載入,載入兩個返回一幀。

(2) 執行時怪物建立卡頓

同樣這個也是由於這個原因造成的,解決方案相對取巧,由於怪物是有觸發器建立,所有在載入場景時候會預先建立所有怪物並隱藏,知道觸發後在顯示出來。

(3) 特效、技能等預製資源卡頓

同樣這個也是由於這個原因造成的,解決方案,這個比較傳統,增加了乙個預製快取池,建立場景時候會對指定配置的特效做快取,建立時候從快取中取出,用完還回去就可以了。

(4) 資源更新

這個暫時只能妥協,只做了配置檔案的更新

理想解決方案:

(a) 以prefab為基本打包力度,為特效、ui節點、角色等等儲存為prefab。

(b) 將所有**、shader、等等公用基礎資源打包到common.ab。

(c) push:common.ab的基礎上打包ui/audio/effect/actor...等分支下的common_*.ab。

(d) push:common_*.ab的基礎上打包ui/audio/effect/actor...下的預製到 *.ab。

(e) 載入載入common.ab,在載入分支支援時候先載入相應的common_*.ab後在載入特定的ab。

(f) 載入可以採用非同步載入形式,場景建立時候可以先建立空節點,等非同步載入完成後在建立並掛接到該節點上。

(g) 關於level,打包時候打包基本場景以及關照貼圖,載入後在動態載入響應節點資料並掛接上去

2.特效

首先這邊的特效基本是有端遊轉過來的,而前期對特效沒有做一些規範性的限制,導致一些特效複雜度相當高,以及裡面包含大量animator(這個損耗相當大)。

其次特效未作統一的管理,而僅僅是簡單的做成乙個prefab。造成後期特效不是太好優化。

理想解決方案:

(a) 提供乙個特效編輯器,組織特效,發布的時候檢查並提示出一些必要的警告方便特效人員修改,同時未特效預製加入自動管理指令碼。

(b) 或採用一些比較好的外掛程式 fx maker 等。

3.場景

場景最大的問題同樣是沒有好的規範,導致前期場景模型用了大量的多維材質,比如乙個石頭可能有 表面/中部/底部/邊緣 等四個材質等等。

理想解決方案:

(a) 盡量只使用一中材質,當然有些工具比如mesh banker 可以拿來優化。

(b) 地表裝飾無盡量將貼圖合併到一張atlas公用,減少批次,比較特殊的情況比如 repeat mode的貼圖可不處理。

(c) static batch 雖然能夠做一定的優化,但是會大大的增加level暫用的硬碟空間,所以可以根據實際場景視角等來確定是否開啟以便減少生成包的大小。

4.動作

操控相對簡單,雖然animator很強大,單可控性卻不是很高,所以選擇使用animation,通過layer進行狀態融合處理。addmixtransform 可以進行上下半身或者特殊部分動作混合。

附帶:關於animator效能,場景中animator過多會造成cpu消耗過高,而aniamtion有可見在更新的狀態選項可以進行控制,animator卻不行,因為是統一管理,所以需要注意。

5.ngui

ngui確實很強大,有自己的批渲染,這類也不需要多說,其中有兩個可以分享的地方

(a) 特效與ngui層級,實際上ngui/panel/drawcall會有乙個renderquene,為了層級正確我們應帶改變特效material.renderququne = drawcall.renderquene + 1,這樣特效就可以在正確的面板上顯示與遮擋。

(b) drawcall優化,可以利用 panel:showdrawcall工具手動調整panel中空間的order來減少drawcall。

6.**加密

**加密相對麻煩,因為其實整個過程中也通過ispy檢視過不少遊戲的**,基本很少做加密的,少量做了混淆。

理想解決方案:

(b) 找到 image.c : mono_image_open_from_data_with_name 函式:

增加**:(簡單的混淆dll)

if  (null != strstr(name, "assembly-csharp.dll"))

} 後編譯生成 libmono.dll/so 到相應平台

(c)將assembly-csharp.dll反向混淆

7. 紋理壓縮

用disunity匯出u3d打包後的資源法線android下紋理實際上是經歷過一次轉換的:

帶alpha通道貼圖-> tga 未壓縮格式 / 除非設定 通常都帶mipmap

不帶alpha通道貼圖-> ktx (etc1 android) 不帶mipmap

顯然為了減少紋理對gpu晶元頻寬的浪費以及對記憶體的浪費android下應當使用etc1,而且etc壓縮失真不算嚴重,驗證可接受。

那麼對於帶alpha通道的貼圖應該如何處理?解決方案1.提取alpha為單獨的alpha通道貼圖 2.提取alpha為灰度圖在儲存為etc1(缺省會轉換)。

這樣有效提高程式效能同時也相應的會減少壓縮後包的大小。因為tag不然縮與etc壓縮後在zip壓縮還是有一定的空間大小差距。

8.其他一些特效

shadow_gun 中有很多不錯的 shader 可以用用 比如envcube可以支援帶lingthingmap的cube反射材質,做冰柱等效果非常好。

water 等可以簡單的用一張nosiy貼圖加cube反射模擬,效果也可以接受。

unity / image effect/ mothionblur 可以做boss死亡特效 配合 time.timescale k幀。

等等 暫時只回想起這麼多,希望對大家有幫助,有問題可以**。

今天專案組換老大了,希望換人後上線能順利,畢竟也花費了不少精力,周五也得離開了,想想也挺傷感的,遊戲行業真不好混。

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...

Unity3D遊戲開發

入門級unity安裝教程 一 unity五大面板 unity3d的介紹 1 介面 選單 面板 元件 unity5.x 編輯器介紹 unity開啟篇 一 滑鼠右鍵 wsadeq前後左右上下移動 shift加速移動 滑鼠右鍵旋轉檢視 滑鼠中鍵移動檢視 alt 右鍵縮放 alt 左鍵旋轉物體視角 q移動場...

Unity3D專案匯入android

不得不說unity很強大,因為乙個工具,可以在所有流行的裝置上生成應用程式。包括android,ios,linux,windows,mac各種常用作業系統。今天來說一下如何將unity3d專案執行在android裝置上,以及在這裡要注意的一些問題。我就用unity3d自代的一那個angrybots....