天天看點

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

作者:烏雲來了libilibi

A:封面是Bug!

B:不!那是鐵山靠!

注:這是學習unity教程時自己的一些想法,可能實驗的方向都很蠢笨,大家有什麼想法可以告訴我。

教程位址:BV1ot4y1478z

Q1:人影模糊

在角色的移動過程中,我們可能會發現移動中的角色會出現模糊的效果,具體的效果類似這樣(截圖和錄屏展現能很好展現模糊的效果,可能跟錄屏的方式有關):

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

當然程度要輕緩很多啦

其實這裡可能是攝像頭的Update方式與角色控制器腳本的Update方式不一緻的問題。我們隻需要修改Cineamachine Brian中的Update方式修改為與腳本相同即可,因為我的腳本中使用的是fixedUpdate來改變運動,是以我可以将camera的Update方式更改為fixedUpdate。

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

記得點選Fixed Update哦

這樣的顯示效果就好很多啦!

Q2:完善WallJump體驗

教程中的跳牆和拐角攀爬是利用射線檢測進行的。

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

在牆上

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

拐角攀爬

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

射線樣式

如圖所示我們有兩條射線,我們将上面的射線命名為ray1,中間的射線命名為ray2。

當我們的ray1和ray2同時檢測到牆體或者僅有ray1檢測到牆體時(并且滿足一些其他條件),我們認為角色仍然挂在牆上;而當檢測不到ray1但是能檢測的到ray2時,我們認為角色有一部分挂在牆上但是快要爬出來了,這時候執行拐角攀爬。

這個邏輯看起來似乎可以,當然事實上确實能執行一部分效果,但是當角色的下半部分,也就是沒有射線的這部分接觸牆體時,

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

空缺區域

這時候我們檢測不到接觸牆體的指令,這時候有兩種情況,一種是角色在地上,但是角色仍有可能在空中,這時候被識别的狀态就是跳躍,但是由于摩擦力被卡在牆上,比較難辦。

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

鐵山靠能卡在牆上是一件很正常的事!

那這時候就有小夥伴就要問了,為什麼不把ray2移到下面呢,嗯……隻能說會有非常奇妙的效果。

最後,為了解決這個問題,我實驗了許多,最終确定了兩個方法,一是修改碰撞體的摩擦力,二是修改代碼的一些邏輯。

方法一:

第一種方法是觀看麥扣老師視訊時候學會的小寄巧,在這裡我想,如果讓角色的一部分有摩擦力,另一部分沒有該多好,是以我們給角色再加一個盒子碰撞體。組合的情況如圖:

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

碰撞體的改變

然後我們給上半部分的盒子碰撞體加一個材質,讓其摩擦力為0,而且下半部分的是一個弧形結構,這樣就可以讓角色在那種情況下順利下滑。但是……雖然解決了一部分問題,但是又有了一些奇妙的效果,因為有了摩擦力為0這樣一個異端,跳牆的時候如果你掌握的夠好,可以營造一種貼着牆面飛行的感覺,而且底下的那個膠囊碰撞體有時候也會卡住。

方法二:

下面就是方法二,給代碼增加邏輯,我們希望給角色來一個全身的檢測,于是不僅僅隻有頭頂有射線,腳底也要有另一條射線。就叫它ray3。

解決人影模糊和完善跳牆(WallJump)體驗—unity角色控制器(1)

新增加的射線

然後我們可以借此修改在牆上的條件,除卻上半部分提到的,我們增加了判斷條件當隻有ray3接觸牆壁,且不在地面上時,同樣設定為滑牆狀态,但是因為角色“騰不出手”,隻能緩緩下落一段時間,然後再修改一下動畫的運作條件,就大功告成了(我相信小夥伴們可以自行修改自己的代碼的!)