在使用Unity做項目時候遇到一些莫名其妙的坑

在使用Unity做項目時候遇到一些莫名其妙的坑

以及適當的解決方案或是避開的方案

1、OnTriggerEnter函數,在同一個點擺兩個相同的Collider。用同一個腳本接受消息後,使用協程實例化GameObject時可能會有一個接收不到。(版本:4.6)

2、不要在Awake函數中做函數操作,在引用時可能會有莫名其妙的問題。最好是Awake函數里做對象的實例化,Start函數里開始做第一次的函數調用。具體可以參考博客:Unity中自帶函數的執行順序.(版本:4.6)

3、Material深拷貝的問題,Material a = b會深拷貝,注意釋放的問題,如果只是修改material屬性,應該使用shareMaterial。(版本:4.6)

4、粒子系統:Mesh類渲染Bug;如果粒子系統是Mesh類型,在發射點處於鏡頭之外時,整個粒子都會不渲染;解決方法是增大粒子的Scale,Scale不會影響粒子的渲染效果,但是會增加渲染範圍。(版本:4.6)

5、粒子系統:粒子系統Mesh類型在攝像機範圍之外時會停止播放並且不消失,當鏡頭轉過來時還會發現粒子仍然保持之前離開鏡頭時的姿勢停在原地;解決方法,增加一個可見性判斷的腳本,如果不可見則進行一般處理。(版本:4.6)

6、不能用中文。

7、WWW在iOS上載入http的時候必須用yield等待;WWW里的URL在PC上可以用While(r.isDone)等待http連接,但是在iOS平台上會陷入死循環,需要創建協程去等。

8、Prefab實例化;Prefab上如果有Unity的NavMeshAgent組件需要被實例化在一個NavMesh上的合理的點,否在會報錯。

9、Prefab實例化;Prefab上有飄帶組件,在首次出生的時候不能瞬間切換坐標,否則飄帶會消失。

10、IL2PP:SocketErrorCode平台差異;SocketException在Windows平台是10035,但是在iOS上報10036;解決方案是把這兩個都設為Connecting。(版本:4.6.3f1)

11、UGUI的Mask在iPad2,iPad mini上失效,在iPad air2上沒事;解決方案,需要在導出選項上選擇Use 24-bit Depth Buffer。

12、Animator.Rebind()。會重建骨骼信息,會使Root節點出現旋轉和位置的偏移;解決方案Animator.play(name,layer,ttime)。ttime設為0;

13、Destroy操作很保守。例如,銷毀mesh時,並不會銷毀material、texture,更不會清理腳本資源。解決方案,合理做法是依賴很卡的UnloadUnusedAssets、LoadScene清理無引用資源(另注意前者是非同步的),或者Bundle.Unload(true),這些方案各有限制。

14、int a = 10;int b = 8; float c = a/b; c的結果會一直顯示為0,因為int類型無法自己強制轉化為float類型。

15、項目中模型和動畫是分開的,後面美術同學把部分動畫重新調整,重新導入的時候會發現部分動畫動不了了,後來經查是美術在動畫調整的過程中把骨骼的名字改了,導致和之前模型對應不上。解決方式,讓美術把命名統一一下,重新導入。

推薦閱讀:

狩夢:幻麟軟體工作室專訪
每次版本更新都卡住?如何手動下載GMS2的runtime工具
如果不服輸,就接著往前走
學生作品橫版動作遊戲《茉奇兔》基本介紹
使用SAI摳圖獲得其他遊戲的像素圖美術素材

TAG:Unity遊戲引擎 | 遊戲開發 | 獨立遊戲開發 |