如何在Unity中實現一根有彈性的魚竿?

時間 2021-05-11 15:18:47

1樓:dxxd

可以用貝塞爾曲線實現,修改模型的mesh頂點:

2樓:逍遙劍客

問題可以簡化, 變成乙個數學問題. (UE4用著熟, 就拿這個當例子, 參考資料是Unity的)

對於魚竿來說, 其實我們只需要保證杆尾這個點是彈性運動即可, 那麼問題就是變成了直杆與彎杆的端點位置的彈性運動, 這個只用乙個PhysicsConstraint就可以搞定了:

在這裡我只用乙個角度約束

那剩下的問題就簡單了, 由三點確定一條曲線. 根據Euler-Bernoulli beam theory, 這個在工程力學中常用的理論, 參考其中的Cantilever beams(懸臂梁)彎曲演算法, 很容易就能得出我們想要的曲線:

因為我們只是想求彎杆在白杆與黃桿之間插值的比率w, 那麼把公式進一步簡化為:

w = x^2 * (3 * L - x) / (2 * L^3). 其中x是離起點的距離, L是杆長度.

用BP實現一下就是:

這樣我們就把曲線上的細分點位置求解出來了:

至此已經解答完畢題主關於"彈性"的問題了. 至於"魚竿"的表現部分, 我也想到兩種實現方法, 一種是SplineMesh, 一種是SkeletalMesh. 下面使用比較通用的蒙皮骨骼模型實現一下看看效果.

Maya裡做根簡單的魚桿, 繫結上一串骨骼:

那匯入引擎之後, 就是需要把之前計算的曲線上的點, 設定到骨骼上就可以了:

原作者為了保持杆的長度不變多加了一步, 把直線插值變成了弧形插值, 這個實現起來也很容易, 就不再做試驗了:

使用unity如何在低幀率下實現高速穿透子彈?

穩單獨行俠 看到某個回答裡提問者說是因為是幀同步才會10幀,具體是什麼遊戲型別不清楚,不過如果是實時操作而非回合制遊戲,這個幀數確實太低了,至少影響正常的操作體驗。也就是會出現一段操作猛如虎,看看畫面才動了一步的情況,遊戲體驗極差。另外,既然是幀同步,那就是具體資料以伺服器為準,那麼自然也是由伺服器...

在Unity中如何實現塗色的效果?

CarefreeQ 射線,模型,uv,set,就行了。關於texture2D,http m.blog.csdn.net article details?id 52635524 lhelpme 需要理解以下幾個概念 1 動態紋理 rendertexture 2 用於繪製的一張小圓點紋理 3 選中物體位...

如何用unity實現dnf中的2d碰撞?

巨魔蘸醬奧利給 我業餘也會做做DNF格鬥遊戲。tianjiuwan 2D ACT 我的思路 碰撞不用Unity的,前後端用一套物理系統。再說碰撞 每個角色有2個碰撞器,乙個移動碰撞器,乙個受擊碰撞器,移動碰撞器放在腳底下,受擊碰撞器包裹全身。DNF角色的移動X 左右 Y 上下 軸上移動,跳躍在Z軸上...