青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

l

成都手游碼農一枚
隨筆 - 32, 文章 - 0, 評論 - 117, 引用 - 0
數據加載中……

[Unity3D]U3D開發項目總結

從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查看過不少游戲的代碼,基本很少做加密的,少量做了混淆。

理想解決方案:
(a) GitHub 上下載 Unity 官方 Mono庫
(b) 找到 image.c : mono_image_open_from_data_with_name 函數:
增加代碼:(簡單的混淆DLL)
if  (NULL != strstr(name, "Assembly-CSharp.dll"))
{
    for (; i < data_len;)
   {
        data[i] = ~data[i];
        i += k;
        k += 1;
   }
}
后編譯生成 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幀。

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

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



posted on 2014-12-04 00:05 l1989 閱讀(15046) 評論(24)  編輯 收藏 引用 所屬分類: 游戲

評論

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

游戲行業分分合合,聚聚散散是常事,的確容易傷感。但不要傷感太久,還有很多志同道合的人跟你在一起奮斗呢。
2014-12-04 10:19 | 陳冠希

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

(a) GitHub 上下載 Unity 官方 Mono庫
。。。
代碼加密這一塊是寫的思路還是真的這么做了?
我下載了,并且修改編譯,啟動后總是報錯JNILoad錯誤。
不知道是不是版本未匹配。
你們成功使用了這個方案?
2015-02-04 19:50 | 陌上清

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@陌上清
正式項目沒用,只是自己測試過,Mono庫版本要和U3D版本一致,分支中有各個版本。
2015-02-05 16:07 | shly

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

您好,關于代碼加密這塊,我們現在有個方案就是文中提到的修改mono。從官方github上下載了Mono2.12.x-Unity4.x及對應的編譯工具包monobuildtools-Mono2.12.x-Unity4.x。但是編譯不過出了問題,在centos7跟Ubuntu12.04上面配置環境后編譯都出問題。。樓主有詳細的步驟提供下么?感激不盡。
2015-03-09 16:04 | ljs

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

伙計,關注你好久啦,沒想到你也從cocos轉到U3D了,咱們經歷很像啊,我當時是找尋cocos的富文本看到你的博客,哈哈,你寫的好簡單,后來在github上down了一個html解決方案,應該和你是同一份源碼吧,改了源碼,走了不少坑,最后還是順利解決了,目前我也在搞U3D項目呢,正在刨坑和tian'keng,不多說啦,有機會再聯系!
2015-03-16 11:59 | laukey

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

樓主有編譯過unity-mono 4.3版本以上的么 4.3后的版本去掉了編譯腳本 不懂咋編譯了
2015-03-30 17:29 | lg

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@ljs
你編譯過了沒有,我也遇見這種問題,qq:737871854
2015-06-26 10:50 | meij

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@ljs
我嘗試的Github上面 Unity4.6的mono版本

在Window 和Mac下均編譯不過_(:з」∠)_ 目前卡著3天了 。。
請問你可有編譯通過?
2015-07-02 15:48 | 喵喵丸

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

@喵喵丸
不好意思 后面的版本沒有嘗試過
2015-07-03 13:58 | azl

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@azl
好吧。。還是謝謝你了~
2015-07-06 17:38 | 喵喵丸

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@azl
我是用的mono-unity4.3版本,在ubuntu上源碼編譯通過,加密部分加入你說的簡單混淆的代碼,也編譯通過,打包apk后,吧Assembly-CSharp.dll文件拿出來,使用ISpy工具,還是輕輕松松的吧代碼給顯示出來,沒任何加密效果。。。。。
使用minizip加密算法,加入了unzip.h頭文件,以及在mono_image_open_from_data_with_name函數中加入相關算法,因為加入了新的頭文件,并引用相關函數,不知道如何編譯了。。。。

如何破破破破破破破破破破破破。。。。。
2015-07-07 17:36 | meij

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

@meij
1.提取出APK中的Assembly-CSharp.dll混淆后放回去
2.再修改mono在加載的時候還原dll
2015-07-07 18:43 | azl

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@azl
你提到的“1.提取出APK中的Assembly-CSharp.dll混淆后放回去
2.再修改mono在加載的時候還原dll ”

是先把unity項目打包apk,提取Assembly-CSharp.dll,使用混淆算法混淆候(加密),然后把加密后的Assembly-CSharp.dll放到apk包中,最后在mono的image.c代碼中,進行反混淆(解密),把生成的libmono.so文件放入對應版本的unity中。是這樣理解嗎?

如此就是說,加密(混淆)部分代碼是要另外寫的,編譯mono生成的libmono.so只是解密。
這樣理解對不?

2015-07-07 19:28 | meij

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

@meij
是的 可以自己琢磨下 我也沒在項目中用過 只是無聊玩了下
2015-07-07 20:20 | azl

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@azl
編譯mono生成libmono.so,對應版本的unity3d里面有好幾個包含libmono的文件,其中androidplayer和androiddevelopmentplayer文件夾下均有armv7a包含libmono.so。
請問用生成的libmono.so文件覆蓋那幾個文件夾下的libmono.so,因為我試了幾次,打包apk安裝后,無任何圖像顯示。。。
2015-07-08 14:40 | meij

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

有解密算法,就有加密算法,能否貼一下簡易的加密算法代碼看一下嗎?參考下,謝謝!對您可能很簡單,對我這種菜鳥卻幫助很大,麻煩貼主,發我qq郵箱也行737871854@qq.com
2015-07-08 20:09 | MKK

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

@meij
無圖像顯示有可能是dll解出來是錯誤的 可以檢查下
2015-07-09 09:34 | azl

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

@MKK
把文件的每個字節去翻就可以了 或者移位等等
2015-07-09 09:35 | azl

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@azl
網上資料好少,收集了一周的資料,下面是自己整理后感覺的流程:
1、修改image.c文件,注入解密代碼

if (NULL != strstr(name, "Assembly-CSharp.dll"))
{
for (i=0; i < data_len;i++)
{
data[i] = ~data[i];
}
}
2、運行build_runtime_android.sh編譯出libmono.so(builds/../armv7a/),將該.so文件覆蓋unity3d中Data/..下的兩個arm文件中的.so文件;
3、打包apk項目;
4、取出apk中的.dll文件,使用vs寫的加密算法進行加密
int _tmain(int argc, _TCHAR* argv[])
{
FILE * fp;
FILE* pSaveFile;
char * filename_O = "Assembly-CSharp.dll";
char * filename_S = "Assembly-CSharp_QQ.dll";
long i;
long last;

if (fopen_s(&fp, filename_O, "rb") != 0)
{
printf("Can not open %s!\n", filename_O);
exit(0);
}
fopen_s(&pSaveFile, filename_S, "wb"); // 打開文件
fseek(fp, 0L, SEEK_END);
last = ftell(fp);
fseek(fp, 0L, SEEK_SET);

char *ret =(char *) malloc(last);
fread(ret, 1, last, fp);
for ( i = 0; i < last; i++)
{
ret[i] = ~ret[i];
fputc(ret[i], pSaveFile);
}
fclose(fp);
return 0;
}
加密后的dll文件為Assembly-CSharp_QQ.dll,將名字改回Assembly-CSharp.dll,再放入apk包中。
我一直是按照這個步驟做的,不知步驟有錯沒,或是加密或解密代碼有錯,導致總是成功不了,謝謝樓主。
2015-07-09 10:15 | MKK

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

@MKK
1.替換dll可以縣城成eclipse工程文件,在替換dll,再打包,省的替換apk簽名出問題
2.加解密可以先自己用解密的代碼在本地測試一下能否還原,驗證一下是不是加密有錯誤
2015-07-09 10:19 | azl

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

@azl
樓主回復的真快,好有愛!
加密后,在解密,我用ILSpy試過,可以正常解密,謝謝樓主給的意見,我使用eclipse替換dll試試,再次感謝!
2015-07-09 10:28 | MKK

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

感謝LZ 已經搞定 主要卡在編譯上面了
2015-08-04 07:02 | LEE

# re: [Unity3D]U3D開發項目總結[未登錄]  回復  更多評論   

感謝LZ 已經搞定 主要卡在編譯上面了 Q32044538 期待交流
2015-08-04 07:03 | LEE

# re: [Unity3D]U3D開發項目總結  回復  更多評論   

樓主挖個墳 請問有沒方法改變讀入的dll的文件位置?例如sd卡 望賜教!感謝~
2016-06-28 20:35 | sping
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩亚洲一区二区三区在线观看| 久久av最新网址| 另类天堂视频在线观看| 国产色婷婷国产综合在线理论片a| 99这里只有久久精品视频| 亚洲电影在线看| 久久夜色精品国产欧美乱| 欧美一级网站| 国产一区二区三区高清播放| 久久久噜噜噜久久中文字免| 欧美一区二区私人影院日本| 国产婷婷色综合av蜜臀av| 久久婷婷国产综合精品青草| 久久精品91久久久久久再现| 伊伊综合在线| 亚洲第一综合天堂另类专| 猛男gaygay欧美视频| 亚洲日本欧美| 中日韩男男gay无套| 国产精品国产福利国产秒拍| 欧美在线免费一级片| 欧美一区1区三区3区公司| 韩国三级电影久久久久久| 久久久久久久999| 久久三级福利| 亚洲无限av看| 午夜综合激情| 亚洲国产欧美一区二区三区同亚洲 | 欧美激情精品久久久久久大尺度| 亚洲精选91| 亚洲欧美日韩精品一区二区| 一区二区三区自拍| 亚洲欧洲日韩在线| 国产欧美日韩免费| 亚洲国产成人高清精品| 国产精品盗摄久久久| 六月婷婷一区| 国产精品jizz在线观看美国 | 中文日韩电影网站| 国产视频在线一区二区| 欧美电影专区| 国产精品日韩在线| 欧美电影免费| 国产日韩一区二区三区在线| 亚洲国产日韩欧美一区二区三区| 国产久一道中文一区| 亚洲电影下载| 国产一区二区0| 99riav国产精品| 原创国产精品91| 亚洲午夜一区二区三区| 亚洲精品国产欧美| 久久精品国产999大香线蕉| 在线亚洲一区二区| 欧美超级免费视 在线| 久久er精品视频| 欧美日韩中文| 亚洲国产成人在线播放| 黄色成人免费网站| 亚洲午夜电影在线观看| 日韩视频在线一区二区三区| 久久精品在线播放| 国模精品一区二区三区色天香 | 在线观看精品| 午夜亚洲影视| 亚洲欧美影音先锋| 欧美日韩综合视频网址| 亚洲国产成人午夜在线一区| 国内精品视频久久| 亚洲一区二区三区久久| 在线视频欧美日韩| 欧美日本乱大交xxxxx| 欧美国产欧美综合| 亚洲国产精品久久久久婷婷老年 | 国产一区二区三区四区老人| 一本色道久久88综合日韩精品| 91久久久亚洲精品| 欧美www视频在线观看| 蜜臀av国产精品久久久久| 国产自产2019最新不卡| 亚洲欧美制服另类日韩| 欧美亚洲系列| 国产有码在线一区二区视频| 欧美一区二区三区另类| 狂野欧美一区| 在线观看欧美日韩国产| 麻豆亚洲精品| 亚洲国产精品成人| 一区二区三区高清在线| 国产精品扒开腿做爽爽爽视频| 国产精品99久久不卡二区| 亚洲影院色无极综合| 国产精品成人一区二区艾草| 亚洲自拍偷拍麻豆| 欧美在线观看网站| 亚洲电影欧美电影有声小说| 麻豆免费精品视频| 夜夜嗨一区二区| 欧美亚洲在线| 亚洲第一成人在线| 欧美高清一区二区| 亚洲无玛一区| 久久精彩视频| 亚洲日本电影| 国产精品看片你懂得| 欧美一区三区三区高中清蜜桃 | 久久嫩草精品久久久久| 最新高清无码专区| 亚洲男人天堂2024| 永久域名在线精品| 欧美日本久久| 久久久精品国产免费观看同学| 亚洲激情成人| 久久国产精品电影| 亚洲美女福利视频网站| 国产精品色婷婷| 免费不卡在线视频| 性色av一区二区三区红粉影视| 亚洲春色另类小说| 久久国产视频网站| 亚洲婷婷国产精品电影人久久| 国产亚洲亚洲| 国产精品www色诱视频| 久久久久久有精品国产| 亚洲视频欧洲视频| 欧美高清视频免费观看| 久久国产黑丝| 亚洲综合成人婷婷小说| 欧美成人免费在线| 亚洲一区二区免费| 亚洲精品一区二区三区不| 久久久国产91| 亚洲午夜激情| 亚洲毛片一区| 在线不卡a资源高清| 国产农村妇女毛片精品久久麻豆| 欧美黑人在线观看| 久久亚洲精品一区| 久久国产精品72免费观看| 亚洲女同在线| 中文亚洲免费| 99在线|亚洲一区二区| 亚洲激情一区| 欧美高清视频在线| 欧美va天堂va视频va在线| 久久激情五月婷婷| 欧美一区二区在线看| 亚洲欧美日韩爽爽影院| 一区二区三区福利| 国产精品99久久久久久www| 亚洲美女视频网| 亚洲精品一区久久久久久| 亚洲福利电影| 亚洲国产合集| 亚洲高清视频一区| 亚洲国产高清高潮精品美女| 伊人狠狠色j香婷婷综合| 国产亚洲成av人在线观看导航| 国产欧美日韩亚洲一区二区三区| 国产精品久久一区主播| 国产欧美韩日| 伊人成人在线| 亚洲精选91| 亚洲制服欧美中文字幕中文字幕| 亚洲午夜日本在线观看| 亚洲在线观看| 久久久久久噜噜噜久久久精品| 另类激情亚洲| 亚洲国产视频直播| 一区二区三区精品国产| 亚洲专区免费| 久久久亚洲影院你懂的| 欧美mv日韩mv国产网站app| 欧美激情中文字幕一区二区 | 久久免费一区| 免费在线观看精品| 亚洲第一区在线观看| 亚洲精品国精品久久99热| 亚洲精品乱码久久久久久久久 | 国产欧美日韩精品在线| 国产一区二区三区在线观看视频 | 久久人人看视频| 欧美黄在线观看| 亚洲精品小视频| 亚洲欧美日韩中文播放| 久久久久久久综合| 欧美日韩ab| 国产一区二区三区高清在线观看| 亚洲激情偷拍| 销魂美女一区二区三区视频在线| 久久久久久欧美| 亚洲精品一区在线观看| 欧美一区二区三区在线播放| 麻豆久久久9性大片| 国产乱理伦片在线观看夜一区| 亚洲国产高清在线| 欧美在线视频观看| 亚洲精品女av网站| 亚洲一区二区三区午夜| 亚洲精品在线观看免费|