黑魂复刻游戏的碰撞摩擦问题——Unity随手记(2021.4.27)
文章目錄
- 前言
- 今天實現(xiàn)的內(nèi)容:
- 角色跳起來時的卡墻問題描述
- 修改物理材質(zhì)方案
- 修改m_planarVec方案
- BUG以及缺陷:
- 值得注意的:
前言
本篇博客旨在解決黑魂like游戲開發(fā)時遇到的一個問題,當我們的角色跳起來撞墻時,會卡在半空中。
而且由于在空中時我們是沒用辦法操作的,所以基本上就卡死了。
今天實現(xiàn)的內(nèi)容:
角色跳起來時的卡墻問題描述
這個問題的描述如前言所述,問題產(chǎn)生的原因主要是因為在我們的角色控制器代碼會在跳起來時鎖死m(xù)_planarVec,而這時m_planarVec是有大小的,所以在FixedUpdate中會一直給剛體的速度賦值(m_rb.velocity = new Vector3(m_planarVec.x, m_rb.velocity.y, m_planarVec.z) + m_thrustVec;),這本來是為了維持跳躍時的慣性效果,卻導致角色撞在墻上時依舊會一直具有一個向前的速度,按照Unity的物理引擎算法,這會產(chǎn)生一個與墻面的摩擦力,所以導致角色掉不下來卡死在墻上。所以這是一個摩擦力的問題。要解決,我們可以更換墻面的物理材質(zhì),或者在檢測到撞墻時改變m_planarVec從而改變速度。
修改物理材質(zhì)方案
先創(chuàng)建一個新的物理材質(zhì)。
關于Unity物理材質(zhì)的幾個參數(shù),分別是動摩擦系數(shù),(最大)靜摩擦系數(shù),彈性,描述該物理材質(zhì)與物體產(chǎn)生摩擦時按照什么算法計算實際摩擦系數(shù)(兩個物體的最大值、最小值、平均值、相乘的值)、以及描述該物理材質(zhì)與物體產(chǎn)生彈性時按照什么算法計算實際彈性系數(shù)(最大值、最小值、平均值、相乘)。在這里,我們將動靜摩擦都設為最小,將Combine設置為按照最小值計算。
接下來,打開Project Settings中的Physics,我們可以將我們自己的物理材質(zhì)設置到Default Material項,這樣項目中所有未指明物理材質(zhì)的游戲?qū)ο髸荒J設置為Default Material項上的材質(zhì)。在這里我們將一個正常摩擦力的材質(zhì)放在Default Material項,因為我們還是需要摩擦力來爬坡,否則站到坡上時角色會自己滑下來。
最后,為了解決BUG,我們將在腳本中動態(tài)修改游戲?qū)ο蟮奈锢聿馁|(zhì),方案還將是老一套,在動畫狀態(tài)Ground上添加FSMOnExit,添加消息OnGroundExit,之后在OnGroundEnter中將材質(zhì)設置為正常摩擦力的,在OnGroundExit中將材質(zhì)設置為零摩擦力的。腳本如下:
[Header("===== 物理材質(zhì) =====")]// 最大摩擦力材質(zhì)public PhysicMaterial friction_normal;// 零摩擦力材質(zhì)public PhysicMaterial friction_zero;// 角色膠囊體碰撞器private CapsuleCollider m_capCol;// ------------------- 生命周期方法 ---------------------- // Awake適合用來做GetComponentvoid Awake(){// ...m_capCol = GetComponent<CapsuleCollider>();}// ------------------- 消息處理 ----------------------public void OnGroundEnter() // OnGround應該理解為:行走/跑時 不一定是指在地面時{// ...// 在行走時設置角色的物理材質(zhì)為最大摩擦力材質(zhì)m_capCol.material = friction_normal;}// 離開Base層的動畫節(jié)點ground時執(zhí)行的方法// 通過PlayerController動畫機中的ground節(jié)點上掛載的FSMOnExit調(diào)用public void OnGroundExit(){// 沒有行走時設置角色的物理材質(zhì)為最大摩擦力材質(zhì)m_capCol.material = friction_zero;}該方案能很好的解決問題
修改m_planarVec方案
這屬于我自己想的方案,具體是,當角色在空中發(fā)生碰撞時,修改m_planarVec的大小。不過這個還是留著以后再實驗吧。
BUG以及缺陷:
這一篇博客都在描述BUG。
值得注意的:
在我們的項目中,沒有任何物體會具備彈性。
總結(jié)
以上是生活随笔為你收集整理的黑魂复刻游戏的碰撞摩擦问题——Unity随手记(2021.4.27)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【20保研】北京航空航天大学网络空间安全
- 下一篇: Adams调用cffsub求解动力学仿真