這幾天一直加班展氓,回來也只是看看視頻,都沒心情整理資料了舷丹。痹籍。
=============================================================
好,先把第一個坑寫上來
一開始邊看視頻邊照著寫代碼贷屎,結果沒注意看罢防,在角色移動的代碼上把SimpleMove寫成了Move,爬坡以后由于視角問題并沒有發(fā)現(xiàn)角色懸空了唉侄,只是看到角色可以穿透一些比較矮的圍欄咒吐。 (花了2個小時在網(wǎng)上找資料,自己寫重力代碼属划。恬叹。。此處省略500字)后來才發(fā)現(xiàn)是沒有重力效果同眯,再反復查看視頻才發(fā)現(xiàn)代碼寫錯了绽昼。
那么SimpleMove和Move到底有什么區(qū)別呢?
先看看官方解釋
SimpleMove
Moves the character with speed.
Velocity along the y-axis is ignored. Speed is in meters/s. Gravity is automatically applied. Returns if the character is grounded. It is recommended that you make only one call to Move or SimpleMove per frame.
=============================================================
Move
A more complex move function taking absolute movement deltas.
Attempts to move the controller by motion, the motion will only be constrained by collisions. It will slide along colliders. CollisionFlags is the summary of collisions that occurred during the Move. This function does not apply any gravity.
看不懂沒關系须蜗,我們有Google翻譯9枞贰目溉!
SimpleMove
以速度移動角色。
沿y軸的速度被忽略菱农。 速度以米/秒為單位缭付。 重力是自動應用的。 如果角色接地大莫,則返回蛉腌。 建議您只對每幀的Move或SimpleMove進行一次調(diào)用官份。
==============================================================
Move
一個更復雜的移動功能只厘,絕對移動三角洲。
試圖通過運動來移動控制器舅巷,運動只會受到碰撞的限制羔味。 它會沿著對撞機滑動。 CollisionFlags是移動過程中發(fā)生的碰撞概要钠右。 此功能不適用于任何重力赋元。
直接看字面意思可以得到:
SimpleMove
1、SimpleMove不受Y軸速度影響飒房,只有X軸和Z軸方向的有效搁凸,且自帶重力效果。
2狠毯、SimpleMove有返回值(BOOL類型)护糖,角色接觸地面則返回true,否則返回false嚼松。
Move
1嫡良、Move可以理解為對一個角色的絕對控制,意思就是在XYZ軸上都不給值的時候献酗,角色不管在什么位置都會靜止不動寝受,唯一會影響移動的就是各種障礙物的剛體碰撞,他會沿著剛體滑動罕偎,所以說這個是沒有自帶重力效果的很澄。
2、Move方法有返回值(CollisionFlags對象)颜及,可以返回一些角色與任何物體碰撞的信息甩苛。
看到這里,這個坑應該算是填上啦器予!
所以說各位跟我一樣的初學的朋友們浪藻,看視頻要仔細咯!乾翔!
=============================================================
另外在填坑的過程中產(chǎn)生了一些疑問也記錄一下吧~
上面有提到我自己查資料爱葵,自己寫重力代碼施戴,發(fā)現(xiàn)一個問題,網(wǎng)上很多兄弟都是用以角色為起點萌丈,放出一條垂直向下的赞哗,突出角色的,突出長度為0.1的射線(這里也把我坑慘了辆雾,射線起點是在角色的中心肪笋,也就是一個半徑為1的球形角色,要發(fā)出一條突出角色且突出長度為0.1的射線度迂,則射線的長度應該是1.1)藤乙,那么問題來了,射線是垂直向下的惭墓,角色又是一個球體坛梁,那么在不規(guī)則的地形中,球在爬坡時腊凶,射線會射不到地面
但是角色是可以在這個地形上停留的划咐,也就是說,角色應該是已經(jīng)落地了
但是由于射線并沒有被擋住钧萍,那么就會一直在執(zhí)行向下的降落的代碼褐缠,由于我寫的重力代碼是有重力加速度的,也就是下落速度是變化的风瘦,那么這樣就會造成下落速度不清零队魏。
我想出來的解決辦法是
1、如果能獲取到球與地面碰撞的相對于球的位置弛秋,那么用球中心向該碰撞點的方向發(fā)射一條射線x器躏。
2、獲取到角色的爬坡角度蟹略,也就是可以在多大的角度上停留登失。
3、創(chuàng)建一條垂直向下的射線y挖炬,計算射線x和射線y的夾角揽浙,大于爬坡角度的話角色還會繼續(xù)下落,反之則角色可以停留在該地形上意敛,則判斷已經(jīng)落地了馅巷。
這是我想的解決辦法,但是水平不夠草姻,暫時還是沒辦法寫出代碼來钓猬。
===============================================================
以上就是我遇到的問題啦,如果有小伙伴們發(fā)現(xiàn)上面有任何錯誤撩独,請您給我留個言敞曹,我會盡快修正账月,免得誤人子弟,謝謝澳迫。
關于最后的問題局齿,有大神懂的也請幫幫忙,發(fā)個代碼上來橄登,大家互相學習Wゼ摺!謝謝啦BG隆Rテ蕖!