我正在嘗試制作一個游戲,其中我得到一個帶有箭頭旋轉的球。球一開始是不動的,但是當我按下按鈕時,我將它發射到箭頭指向的方向。玩家可以選擇在空中按下另一個按鈕以使球“粘”,所以當它撞到墻上時,它會粘在表面上并重復這個程序,直到他到達關卡的頂部。
除此之外,我想給玩家一個選項,如果他沒有按下那個按鈕,而不是粘在墻上,而是從墻上反彈,但是當他這樣做時,玩家應該在每次反彈時加快速度,給出選擇要么安全而緩慢地玩,要么嘗試像他一樣快速獲得更多積分。
對于早期的原型設計,我每次發射時都會用力將玩家向上移動,但我不確定如何讓他每次從墻上反彈時加速。對我來說,這更像是一個數學問題,而不是一個編碼挑戰。我在想的是我必須找到玩家撞墻的角度,并根據這個角度向他應該在碰撞后遵循的方向施加力。
可悲的是,我對三角學不太擅長(盡管正在研究它)。我在想我可能需要使用包含 sin、cos、tan 公式的公式,但我不知道該怎么做。任何幫助都非常感謝!如果您需要更多資訊,請告訴我,我很樂意提供。
編輯:在第一次回答這個問題后,我還發現了那些深入研究該主題的鏈接。我會在這里為有同樣問題的人鏈接它們。
以任意角度將球從墻上彈起?
http://www.3dkingdoms.com/weekly/weekly.php?a=2
uj5u.com熱心網友回復:
如果你的球有速度矢量V=(vx,vy),那么在從站立表面以法線彈起后N,球的新速度為
V' = V - 2 * N * (V.dot.N)
其中 dot 是向量 ( vx*nx vy*ny)的標量積
特殊情況:從垂直壁彈起 ( N=( -1, 0)) 導致 vx 分量反轉,vy 分量保持不變。V' = (-vx, vy)
從水平墻 ( N=(0, -1)) 彈跳會導致 vy 分量反轉,vx 分量保持不變。V' = (vx, -vy)
注意我建議使用速度矢量分量,并且僅在真正需要時才使用角度。
如果您需要計算移動蝙蝠的彈跳,則值得將靜止坐標系更改為移動坐標系,與蝙蝠連接,在該系統中找到反射,然后恢復為靜止坐標系。
uj5u.com熱心網友回復:
好的,問題解決了!
我要感謝 @MBo 和 @shingo 對解決方案的貢獻。雖然 Mbo 的答案通過三角函式解決了這個問題,并為我提供了很好的材料來研究和弄清楚事情是如何作業的,但我在問題的評論中遵循了 shingo 的建議,并設法在沒有深入研究數學的情況下做到了。
所以基本上他所說的,我所做的,就是使用 Unity 的物理引擎,讓球撞到墻上。球從墻上反彈后,它會根據物理方向獲得一個新的速度向量。然后我創建了一個 OnColllisionExit 檢查,當球停止與墻壁碰撞時,我向它的新 Velocity Vector3 方向添加強制。
奇跡般有效!
感謝大家的貢獻!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512421.html
上一篇:實作明暗模式?
