[英]Addforce won't knockback my player character
我正在嘗試為我的玩家添加擊退,但他不會移動。 我知道 function 被正確調用並且 if 語句有效,因為他仍然會受到傷害,但玩家根本不會移動。 奇怪的是,如果我將 addForce 放在其他地方(比如在 update() 方法中),它會起作用,但在這種情況下不會。
一些幫助將不勝感激
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy")
{
TakeDamage(-20, 21);
theRB.AddForce((collision.transform.position - transform.position).normalized * 100, ForceMode2D.Impulse);
}
}
如果有幫助,這是剛體的樣子:
嘿,我認為這里的問題在於您使用
(collision.transform.position - transform.position)
相反,我會使用碰撞的接觸點計算方向並將其保存在向量中。 然后對該向量進行歸一化並乘以 -1 以向相反方向啟動播放器。 這是一些示例代碼:
Vector2 dir = collision.contacts[0].point - transform.position;
// Flip the vector and normalize
dir = -dir.normalized;
// Apply Force
theRB.AddForce(dir * 100, ForceMode2D.Impulse);
好的,所以我想出了答案。 問題在於我在 Movement() function 中管理運動的方式。 為了創造運動,我使用了這一行:
theRB.velocity = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized * playerSpeed;
顯然,速度與 AddForce 並不能很好地配合,原因我無法解釋,因為我對 Unity 的理解仍然有限。 我需要找到一種更好的方法來管理運動,一旦我弄清楚了,我會編輯這篇文章,以防有人犯了和我一樣的錯誤。
編輯:所以,結果我一直在尋找幾個星期,但沒有找到任何東西。 我的最終解決方案是使用 LERP 而不是 Addforce(),並且完全忘記物理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.