Unity3D技術之利用角色控制器實現爬坡減速效果

2021-06-28 15:55:11 字數 2157 閱讀 4770

歡迎來到狗刨學習網,這裡有很多

u3d資源、、

u3d常見問題

、u3d專案原始碼

,我們致力於打造業內unity3d

培訓、學習第一品牌

按照正常情況遊戲中角色在上坡爬坡的時候速度應該減慢,可是角色控制器元件沒有幫我們做這個判斷,剛好最近工作中需要做這個功能,我就用勾股定理的法則來 解決這個問題。如下圖所示,當角色在爬坡的時候,角色控制器預設行走的距離就是 「c」 

。但是如果行走的距離是

「c」 

你會發現上坡的速度太快了。這裡我們需要計算

」b」,讓角色在上坡時候一次移動的距離是

」b」這樣移動就很正常了,文章出處【狗刨學習網】。

按照勾股定理的法則, 

c二次方 

= a二次方 

+ b二次方。已知 

c  和 

a 我們求的

b的距離即可。

第一步:主角目前所在地形的

3d座標,以及主角面朝方向行走

「一段距離」後的

3d座標。 

「一段距離

」 我這裡使用他的行走速度也就是

1秒行走的長度。

第二步:把部分**新增入角色控制器元件。預設角色控制器行走是走路,簡單改一下讓他跑步。找

updatesmoothedmovementdirection ()

方法,加入

「|ismoving」 

這個判斷條件。

if (input.getkey (keycode.leftshift) | input.getkey (keycode.rightshift) | ismoving) 

然後找到

update()

方法,(c#和

js都可以編譯通過下面這段**)

//-------------開始插入** ------------- 

//當主角處於移動狀態時開始計算主角目前座標以及1秒後坐標 

if(ismoving()) 

//得到主角行走1秒後所在位置地形的座標 

var newpos = transform.position + (transform.rotation * vector3.forward * movespeed); 

newpos.y = terrain.activeterrain.sampleheight(newpos); 

//得到主角當前位置所在地形的座標 

var heropos = transform.position; 

heropos.y = terrain.activeterrain.sampleheight(transform.position); 

//繪製一條debug的線段,在編輯器中看的更清楚。 

debug.drawline(heropos,newpos,color.red); 

//斜邊的長度 

var c = movespeed; 

//短直角邊的長度 

var b = newpos.y - heropos.y; 

//b >0 標示主角在爬坡 b < 0 表示主角在下坡 

if(b > 0) 

// 根據公式計算 a = 根號下 c二次方 -  b二次方 

var a = mathf.sqrt(mathf.pow(c,2) - mathf.pow(b,2)); 

movespeed = a; 

//-------------結束插入** ------------- 

// calculate actual motion 

vector3 movement = movedirection * movespeed + new vector3 (0, verticalspeed, 0) + inairvelocity; 

movement *= time.deltatime; 

直接執行遊戲,你會發現當你在爬坡的時候主角的移動速度會減少,下坡與平地的時候移動速度正常。

另外還有乙個地方需要注意下。 使用角色控制器時如果你的坡度角度過於大,你會發現你的主角無法繼續爬坡。如下圖所示,預設坡度角度為

45。如果你需要爬坡更高的角度,直接修改

slope limit

數值即可。

當然**中我們也可以控制角色是否可以繼續爬坡,根據上述**兩點

y座標的插值也可以判斷。

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...

Unity3D眼鏡Shader技術實現

筆者介紹 姜雪偉,it公司技術合夥人,it高階講師,csdn社群專家,特邀編輯,暢銷書作者,已出版書籍 手把手教你架構3d遊戲引擎 電子工業出版社和 unity3d實戰核心技術詳解 電子工業出版社等。最近在利用shader實現眼鏡的反射,透明以及高光,法線等效果,unity雖然為我們提供了很多的sh...

Unity3D角色換裝實現原理及步驟

1 角色模型製作 unity3d支援skin動畫,但是不支援physique動畫,會發現physique動畫在unity裡嚴重變形,因此在模型的骨骼動畫的製作上面 要用skin,當然也可以做成physique,然後用外掛程式轉換一下 3dsmax的外掛程式phytoskin,3dsmax中轉換之前 ...