unity自己遇到的一些bug与解决方法的记录
場景跳轉(zhuǎn)后,材質(zhì)丟失
原因:因為沒有光照,加入光照即可
無法調(diào)用系統(tǒng)的函數(shù)
(實際上寫的時候發(fā)現(xiàn)不能調(diào)用這個api,原因是在于自己命名了一個Camera的腳本這樣會覆蓋系統(tǒng)自帶的。)
一些經(jīng)驗總結(jié)
- 寫完某段功能時要在旁邊標上注釋
- 不要在update里放那么多東西,封裝成函數(shù)再放在update里調(diào)用,養(yǎng)成好習慣。
了
因為考研很長時間沒碰unity再碰unity時的感受:
2022.1.21做gamejam的2d平臺跑酷游戲中得到的經(jīng)驗教訓:
簡單的2d平臺跑酷游戲好像看似很簡單,但是我卻眼高手低,以為這些很簡單都很好實現(xiàn)。但是事實上是,雖然以前自己做過這些東西,但全都是按照教程去跟著一步一步照貓畫虎去做的,做完之后自己并沒有拋開教程去復刻一遍,于是導致了這樣的情況:
每一行代碼大概都能看懂在做什么,但是連起來,為什么這么做的邏輯,可能無法完全理解
有些東西你拋開教程自己去做然后會發(fā)現(xiàn)說,自己忘了一些細節(jié)。比如實現(xiàn)跳躍,需要有幾個關(guān)鍵點:①不能讓玩家在空中連續(xù)跳躍多次 ②要實現(xiàn)跳躍后,離地的判斷。 ③普通跳躍與蓄力跳躍
兩個腳本中的update和fixedupdate存在互相獲取值變量時會出現(xiàn)的影響
A腳本中的變量如果是在fixedupdate函數(shù)中更新的,而在B腳本中,我們在update函數(shù)中去獲取A腳本的這個update函數(shù)的變量的值,那么此時,兩個函數(shù)的獲取速度會有差異。:
這可能會造成意想不到的影響。
獲取玩家輸入使用update而不是fixedupdate
使用getkeydown的話,接受玩家的輸入不能放在fixedupdate中,否則可能會丟失一瞬間的輸入。
粗心的錯誤
聲明某個變量,并在start函數(shù)中初始化時,不小心寫成了這樣的形式:
這樣會導致最終無法成功初始化
對象引用對于非靜態(tài)的字段,方法或?qū)傩允潜仨毜?/h2>
犯的錯誤如下:首先在類中聲明了一個非靜態(tài)變量
但是此處我卻在靜態(tài)成員函數(shù)中聲明它:
這里就犯了一個很明顯的錯誤,對于靜態(tài)成員函數(shù),是不能為非靜態(tài)成員變量初始化的,也不能調(diào)用非靜態(tài)成員方法。
因為靜態(tài)成員函數(shù)屬于整個類,在類實例化對象之前就已經(jīng)分配空間了,而類的非靜態(tài)成員必須在類實例化對象后才有內(nèi)存空間,所以這個調(diào)用就會出錯,
類里面的方法有兩種表現(xiàn):一種是直接可以來用的,還有一種是必須實例化以后才能使用的。前者要求在方法生明的時候必須加上static關(guān)鍵字。
簡單來說引發(fā)這個bug的原因就是調(diào)用類里面的非靜態(tài)方法、成員變量所導致的。
物體跳躍時移動卡墻的問題
此處使用的是改變物體的速度,使其移動的。
一旦鎖住其z的旋轉(zhuǎn),會導致其在移動時,會需要卡住z的旋轉(zhuǎn)角度,從而導致卡墻。
解決方法:
給物體添加光滑的物理材質(zhì),給玩家也添加光滑的物理材質(zhì)。
人物走路遇到很小的坡走不動
因為設置成剛體又鎖住了旋轉(zhuǎn)導致走不過去,可以將人物的立方體的碰撞箱改為膠囊體即可。
善用微軟官方英文文檔解決錯誤
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference
可以在上面搜索c#的文檔
子類希望隱藏父類的變量需加new關(guān)鍵字
如圖所示 父類中有一模一樣的變量名,如果希望隱藏父類的關(guān)鍵名需加new關(guān)鍵字。
導入包時,物體的層級消失
如下所示
是因為自己做包的人自己設置了層級,但是導出包后再導入的人則會丟失該層級,此處就需要自己手動設置層級。
無法在人物靜止時賦予agent速度
想通過直接設置agent的速度來模擬擊退效果,結(jié)果發(fā)現(xiàn)當人物處于靜止狀態(tài)時,agent的速度賦值不上的問題。但是當人物處于移動狀態(tài)時,卻能正常賦值。
解決方法:禁用Auto Braking即可。
總結(jié)
以上是生活随笔為你收集整理的unity自己遇到的一些bug与解决方法的记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何掘到第一桶金
- 下一篇: 通过注册表改变“我的文档”等的默认位置