簡體   English   中英

Addforce 不會擊退我的玩家角色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM