歡迎來到狗刨學習網,這裡有很多
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中轉換之前 ...