1. 程式人生 > >Unity3D都有哪些坑

Unity3D都有哪些坑

坑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哪些

坑1:Unity版本升級,手賤跟著升級,然後專案各種錯 解決方案: 新版本先觀望一段時間,新版本都有坑的。 坑2:Git做版本更新是,有些Prefab的資料死活不能同步 解決方案: 1.Edit->Project Settings->Editor 設定種開啟 m

室內定位應用哪些

2015年,有幸以專案經理角色做了某省級單位的室內定位應用專案,主要是基於現場位置的資訊推送,期間遇到了相當多的困難,但最終都逐步解決,在當時來看,該專案在室內定位精準度和技術層面都是處於行業領先水平,也獲得了業內創新獎項。 回首過往,大大小小的坑遇了不少,如果你正在或即將要做室內定位方面的

老司機的分享:寫簡歷的過程中,哪些

      本人在甲方做招聘為主的工作,有7年多的時間,後來出來做獵頭公司,也有將近3年的時間,整天與簡歷、與人、與面試相關的流程打交道,總結了一些寫簡歷的經驗,分享如下,歡迎交流指正: (本人後續也會分享一些面試心得,歡迎關注) 一、關於簡歷的排序 一般而言,

ROWNUM如何獲取前N條記錄,以及ROWNUM的哪些???

  場景:獲取待處理表按時間排序後前N條待處理記錄 錯誤寫法:select * from table_name where status = '0' and rownum <= 100 order by upd_time; --滿足條件的記錄取前100條後結束掃描,在排序這個

Unity3d開發遊戲的優點哪些

unity3D是如今絕大多數遊戲開發團隊的首 選3D引擎,並且它在2D上的表現也及為優秀。它可以輕鬆解決很多其它引擎不能解決的問題,此外還有很多出眾的地方,這都是現在越來越多的人選擇unity3d遊戲開發的原因,下面就讓我們來看一下這些優點所在吧! 1可定製的IDE環境 U3D這種ALL IN

卸妝產品哪些

化妝品 卸妝油 植物油 苯甲醇 芝麻油 對於長期化妝的MM來說,粉底、眼影、唇彩等化妝品都含油脂成分,黏附於皮膚表面, 加上在外奔波一整天之後,臉上出現浮粉和卡粉,那是粉底顆粒混雜了空氣中的汙染物、細菌、黴菌、灰塵等等,所以卸妝不止是清潔步驟,更是護膚的重要環節,而卸妝需專用的卸妝用品、用

工傷保險待遇哪些類型

受傷 com 賬戶 2個 eba 自治區 想要 部門 .sh   工傷保險待遇都有哪些類型   工傷保險待遇包括:工傷醫療待遇、工傷津貼待遇、傷殘待遇、職業康復待遇、因工死亡待遇等。   1、 工傷醫療待遇——工傷職工在醫療期或醫療期滿仍需治療的,享受工傷醫療待遇工傷醫療待

SQL 查找存在某內容的存儲過程哪些

sys inf pro 哪些 存在 sch for object objects --查找存在某表名的存儲過程 SELECT distinct b.name from syscomments a,sysobjects b WHERE a.id=b.id and a.TEX

大公司的PMO哪些角色

很多大公司已經有了自己成熟的項目管理體系了。對應這些管理體系需要建立與其相適應的PMO,這樣子,才能讓企業在線新的管理模式更好的發展下去。那麽,大公司的PMO都有哪些角色呢?對於一些職能型大公司想要引入項目管理理念,不妨先了解清楚PMO都有哪些角色吧。 企業實施項目管理戰略規劃,建立項目管理

雲主機哪些參數?

文件 友好 選擇 比較 硬盤 下載 根據 體驗 而且 雲服務器因為其管理簡單、操作方便的特點,受到很多企業的青睞。購買雲服務器不需要提前購買硬件,而且在使用過程更穩定、更安全,但是也有一個問題,客戶在購買的時候,不知道該怎麽選擇雲主機的配置,下面我們就一起倆看一下如何選擇雲

申請 ISO9001認證的基本條件和材料 哪些

tex blog 機構 積極 創業 好處 條件 服務 col 對於ISO9001認證的好處有如下這些,今天呢,我就來說說申請ISO9001 的基本條件和申請材料。 1、通過認證使企業具有了走向市場的通行證。2、增進國際貿易,消除技術壁壘,與國際先進管理慣例接軌,融入一體化國

聚客優盟跟你講不起眼利潤高的行業哪些,

更多 營業額 們的 一次 時間 發現 好項目 好的 ref 現在市場上隱藏著很多比較低調的加盟項目,為什麽說他們低調。加盟費用低,利潤卻高的很。當然最常見的就是街邊的燒烤、臭豆腐、炸土豆的等等,一年的時間幹的好的話,估計買套房沒什麽大問題,就算幹得不好也有幾萬或者是幾萬保底

MySQL哪些日誌?分別代表什麽?

mysql日誌MySQL日誌:主要包含:錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進制日誌、中繼日誌;日誌是mysql數據庫的重要組成部分。日誌文件中記錄著mysql數據庫運行期間發生的變化;也就是說用來記錄mysql數據庫的客戶端連接狀況、SQL語句的執行情況和錯誤信息等。當數據庫遭到意外的損壞時,可以通

Spring Boot 2.0(三):Spring Boot 開源軟件哪些

Spring Boot 開源 2016年 Spring Boot 還沒有被廣泛使用,在網上查找相關開源軟件的時候沒有發現幾個,到了現在經過2年的發展,很多互聯網公司已經將 Spring Boot 搬上了生產,而使用 Spring Boot 的開源軟件在 Github/碼雲 上面已有不少,這篇文章就給大

知識產權貫標對於企業和消費者哪些影響和好處?

知識產權貫標 高新技術企業 專利申請經濟全球化的快速推進,知識產權不再僅僅是激勵創新的一種工具,而已經成為了一個企業、一個國家的一種重要的戰略資源,全球化的市場環境倒閉意味著我們國內的企業必須更加重視對知識產權的有限管理。 知識產權管理體系的建立,有助於實現企業的可持續發展。知識產權管理有助於將組織中只可以

公交站臺哪些設計風格

公交站臺一、現代候車亭 現代,顧名思義就是時下、當下。現代候車亭,就是符合現在當代潮流、審美乃至需求的公共交通公交站臺。現代公交候車亭的款式多樣、規格均可定制、附加功能多有太陽能、智能、電子語音播報、LED 、滾動燈箱等。現代公交站臺隨著發展,隨著科技,逐漸切合並融入人們的生活。二、仿古候車亭 仿

Java代碼優化,哪些常用方法?

Java開發 Java學習 Java代碼優化 Java代碼優化是Java編程開發很重要的一個步驟,Java代碼優化要註重細節優化,一個兩個的細節的優化,產生的效果不大,但是如果處處都能註意代碼優化,對代碼減少體積、提高代碼運行效率是有巨大幫助的,還能在一定程度上避免未知錯誤,常用的Java代碼優化

中國化的 P2P 金融哪些特色?

中國化 P2P 金融 特色 P2P金融又叫P2P信貸,是互聯網金融(ITFIN)的一種。意思是:點對點。  P2P金融指不同的網絡節點之間的小額借貸交易,需要借助電子商務專業網絡平臺幫助借貸雙方確立借貸關系並完成相關交易手續。借款者可自行發布借款信息,包括金額、利息、還款方式和時間,自行決定借出金

Python的性能如何? 來看看全球哪些頂級的公司在使用Python

Python用途 Python的未來 Python就業前景 大家可以關註公眾號:Python從程序猿到程序員目前有超過500種編程語言,每天仍在新增更多新語言。雖然其中有大部分重疊的語言以及大量僅用於理論和試驗的編程語言。但你必須選擇一種作為日常工作生活常用的編程語言。你應該學習哪些語言,為什麽你

學物聯網和嵌入式好不好?哪些課程?

雲計算?學物聯網和嵌入式好不好?都有哪些課程?物聯網是嵌入式發展的一個方向但是個人覺得物聯網的前景發展要稍微好一些,畢竟現在智能家居、智能生活這麽受人追捧,而且也是今後生活的大方向建議題主可以考慮學習物聯網物聯網主要學習以下這些東西: 階段一 - 學前準備: 嵌入式C語言高級—語法概述 嵌入式C語言高級—內存