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