Addforce不会击退我的玩家角色

时间:2019-11-14 10:08:42

标签: c# unity3d

我正在尝试向玩家添加击退,但他不会移动。我知道该函数已正确调用,并且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);
        }
    }

如果有帮助,这是刚体的外观:

2 个答案:

答案 0 :(得分:2)

嘿,我认为这里的问题是您使用

(collision.transform.position - transform.position)

我将改用碰撞的接触点来计算方向,并将其保存在Vector中。然后将向量归一化并乘以-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);

答案 1 :(得分:1)

好的,所以我想出了答案。问题出在我在Movement()函数中管理运动的方式。要创建运动,我使用了以下行:

theRB.velocity = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized * playerSpeed;

显然,由于我无法解释的原因,速度对AddForce并不能很好地工作,因为我对Unity的理解仍然有限。我需要找出一种更好的方式来管理运动,一旦发现错误,如果有人犯了与我相同的错误,我将对其进行编辑。

编辑:所以,事实证明我已经找了好几个星期了,什么都没找到。我的最终解决方案是使用LERP而不是Addforce(),并且完全不用理会物理学。