Unity3D的一些坑
轉(zhuǎn)載地址:http://blog.csdn.net/yupu56/article/details/53189208
坑1:Unity版本升級,手賤跟著升級,然后項目各種錯
解決方案:
新版本先觀望一段時間,新版本都有坑的。
坑2:Git做版本更新是,有些Prefab的數(shù)據(jù)死活不能同步
解決方案:
1.Edit->Project Settings->Editor 設(shè)置種打開 meta files 讓meta文件和原始文件一起同步
2.Edit/ProjectSetting/Editor設(shè)置中AssetSerialization改為ForceText就行,但是我們的項目并沒有解決問題,就那兩個Prefab至今無解。
坑3:Mac系統(tǒng)上無法雙開Unity
解決方案:
笨的辦法呢,裝兩個不同版本,或者裝完,拷貝一份。好一點的辦法用命令行再打開一個。在好一點的,寫一個shell腳本,調(diào)用命令行的打開Unity命令,已完美解決,在我另一篇文章中。
坑4:Unity打包到Android和IOS端后的StreamingAsset路徑問題
string StreamingAssetPath ?
{
get
{
string filePath = ??
#if UNITY_ANDROID && !UNITY_EDITOR ?
? ? ? ? “jar:file://” + Application.dataPath + “!/assets/” + flodername + “/”; ?
#elif UNITY_IPHONE && !UNITY_EDITOR ?
? ? ? ? Application.dataPath + “/Raw/”; ?
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR ?
?“file://” + Application.dataPath + “/StreamingAssets” + “/” + flodername + “/”; ?
#else ?
? ? ? ? string.Empty; ?
#endif ?
return filePath;
}
}
坑5:做UI的時候,背景圖片太多,大圖太多。
解決方案:切記做UI的時候美術(shù)給你什么圖就用什么圖,需要裁剪的,復(fù)用的,9空格的,作為技術(shù)支撐,要告訴美術(shù)新手,圖該怎么做。不能怎么做。
坑6:對Unity操作不當,或者導(dǎo)入資源過大時,導(dǎo)致Unity崩潰
解決方案:當電腦內(nèi)存不夠是,Unity容易出現(xiàn)問題,甚至Crash。建議換個電腦
坑7:后期優(yōu)化項目完后,沒有效果,適得其反
解決方案:優(yōu)化是需要把握一個度的,比如優(yōu)化分為CPU,GPU和內(nèi)存,我們可以犧牲內(nèi)存減少CPU的調(diào)用,也可以增加GPU的消耗,減少內(nèi)存。也可以將DrawCall減少到極致。但是凡事有個度,在優(yōu)化的之間需要平衡各項。比如當CPU優(yōu)化過度后,必定增加了GPU和內(nèi)存的消耗,可能有戲不會流暢反而更卡。尤其批處理功能,不能濫用。因此:
1.內(nèi)存可以犧牲,但不能太大,為了保證大多數(shù)機型的正常運行
2.CPU優(yōu)化中DrawCall可以減少,但不能太多,適量減少,要不然必定增加內(nèi)存。
坑8:遮擋剔除開了沒用
解決方案:需要根據(jù)不同的場景,不同的游戲,修改遮擋的參數(shù)設(shè)置,默認的不適用于任何場景。
坑9:Animation占用內(nèi)存較大
解決方案:合理使用,等待Unity的官方優(yōu)化。
坑10:材質(zhì)屬性修改,導(dǎo)致內(nèi)存增加
解決方案:當修改材質(zhì)的某個參數(shù)時,Unity會為我們從新New一個,所以當需要不同參數(shù)的材質(zhì)時,最好先創(chuàng)建好,避免在update中更新材質(zhì)的某參數(shù)。
坑11:Material深拷貝問題
解決方案:Material a=b;會深度拷貝,需要注意釋放的問題。或者使用SharedMatetial
坑12:圖片格式選擇TrueColor和16Bit,非常占內(nèi)存
解決方案:
1.盡量避免使用TrueColor,比較占內(nèi)存。
2.16bit雖然會吧像素壓縮一般,但是導(dǎo)致像素不清,親測還不如Compress
3.盡量選擇Compress,Unity會對其進行壓縮并且清晰度可以。親測。
4.以上選項沒能滿足你,可以選擇圖片的FilterMode試試看。詳細自己去查吧。
坑13:DestroyImmediately的使用
解決方案:
1.DestroyImmediately會立刻釋放,占用系統(tǒng)資源,可以改為Destroy等系統(tǒng)空閑時統(tǒng)一釋放。
2.Destroy也要盡量少用,因為創(chuàng)建和銷毀都會占用系統(tǒng)資源。鼓勵使用對象池。
3.Destroy操作很保守。例如,銷毀mesh時,并不會銷毀material、texture,更不會清理腳本資源。解決方案,合理做法是依賴很卡的UnloadUnusedAssets、LoadScene清理無引用資源(另注意前者是異步的),或者Bundle.Unload(true),這些方案各有限制。
坑14:System.GC的使用
解決方案:
1.Unity的堆和.net的堆不是同一個。GC釋放的是.net的堆內(nèi)存,所以有時候并不能達到我們的目的。而且GC調(diào)用多了也會增加CPU的消耗。
2.Unity的釋放使用Resources.UnloadUnusedAsset.
坑15:歐拉角的使用。
解決方案:
1.首先歐拉角的表示較容易理解,但是弊端是效率低和萬向鎖。
2.可以使用四元數(shù)來代替,雖然不容易理解,但可以從歐拉角轉(zhuǎn)換過來。
坑16:xxx.dll明明導(dǎo)入了,系統(tǒng)卻提示沒有
解決方案:
1.確認導(dǎo)入的是32位還是64位是否跟機型匹配。是否導(dǎo)入重復(fù)。
2.檢查BuildSetting中API Compatibility Level選擇的是.Net2.0還是.Net2.0 Subset,改為前者試試。如果是WebPlayer平臺,無法選擇.Net2.0
坑17:粒子系統(tǒng)的濫用
解決方案:粒子系統(tǒng)做出來的東西很炫,但是好東西不能多用。用多了系統(tǒng)受不了的。
坑18:Unity突然崩潰,場景沒保存,Prefab沒保存
解決方案:寫一個編輯器腳本,在Unity意外退出時自動保存。詳見我的另一篇文章
坑19:AssetBundle的使用
解決方案:
1.打包AssetBundle的資源依賴,以及解壓時的資源依賴。需要自己捋清楚,否則坑死你。
2.升級到Unity5.0后,雖然自帶了打包系統(tǒng),但是依然需要你自己捋清依賴關(guān)系。
3.解壓和使用完Asset后,記得解壓的文件還在內(nèi)存中,需要你去釋放。
4.有些文件避免重復(fù)下載,可以使用LoadFromCache方法,但是它也有坑,用的時候小心點。
坑20:打包到移動端的項目打不開,不知道什么錯
解決方案:
1.蘋果端,可以在Xcode運行程序,然后看錯誤在那一行報錯
2.安卓端,可以到處Android項目在AndroidStudio或Eclipse運行,看日志,也可以使用SDK自帶的adb logcat -s Unity 功能來輸出日志查詢。
坑21:場景好好的,但是Scene視圖卻什么都看不到了
解決方案:一個同事發(fā)現(xiàn)這個現(xiàn)象,剛開始我也熟手無策,場景中物體明明在,但就是看不見。檢查下Unity右上角的Layers選項,是否點擊了某個層的關(guān)閉
坑22:UGUI中按鈕無響應(yīng)
解決方案:
1.檢查按鈕上方是否有圖片或Panel等遮擋,屏蔽了按鈕事件。
2.檢查EventSystem是否不小心刪掉了。
坑23:UGUI上加粒子特效的層級問題
解決方案:可以設(shè)置粒子的畫布深度。或者新建畫布。
坑24:Unity下使用中文名和路徑
解決方案:
1.資源導(dǎo)入時,有中文必定出錯。資源導(dǎo)出時中文路徑不出錯。
2.圖片和Prefab可以使用中文,但有出錯的可能性。
坑25:Unity自帶腳本編輯器MonoBehavior的亂碼問題
解決方案:在MonoBehavior和VS之間切換時容易出現(xiàn)亂碼,暫無好的解決方案。最好選一個使用別亂換。
坑26:模型師的做動作導(dǎo)出到Unity就報錯。
解決方案:讓模型師檢查骨骼的名字是否重復(fù)或?qū)戝e。讓其按照一定的規(guī)則命名。
坑27:項目越寫越凌亂
解決方案:
1.重構(gòu)是每時每刻進行的,不是到了最后階段花幾個月的時間進行重構(gòu)。如果感覺代碼已經(jīng)有了壞味道,就立刻去重構(gòu),否則以后就更懶得去重構(gòu)了。導(dǎo)致代碼越來越爛。(推薦《重構(gòu)》)
2.嚴格遵循MVC模式,組合復(fù)用等設(shè)計原則進行框架的設(shè)計。(《設(shè)計模式》)
3.單例模式不能濫用,代碼之間的耦合度會增加。
4.代碼的命名要有規(guī)則,養(yǎng)成習慣。推薦谷歌命名法和駝峰命名法。
5.多看別人的代碼結(jié)構(gòu),學以致用。
總結(jié)
以上是生活随笔為你收集整理的Unity3D的一些坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php通过ajax下载文件,通过Ajax
- 下一篇: Unity3D重要知识点