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