首页 > 解决方案 > 即使碰撞有效,rb.addforce 也没有响应

问题描述

你好吗?我正在研究一种简单的击退机制,如果我的角色与“敌人”这个名字发生冲突,则被解释为 (rb) 的玩家刚体会增加“后退”的力量。

这是我的代码,请参考我用星号列出的地方。

公共类移动:MonoBehaviour {

public float speed;

private Rigidbody rb;

public int health;
private float knockback;


// Use this for initialization
void Start()
{
    rb = GetComponent<Rigidbody>();
    knockback = 2f;

}

void OnCollisionEnter(Collision col)
{
    if (col.gameObject.name == "enemy")
    {
        health = health - 20;  //**this works**
        rb.AddRelativeForce(Vector3.forward * knockback); //**but this doesnt :c **
    }
}

void death()
{
    if (health <= 0)
    {
        print("i died");
    }
}

void playerWalk()
{
    var x = Input.GetAxis("Horizontal") * Time.deltaTime * 75f;
    var z = Input.GetAxis("Vertical") * Time.deltaTime * 5f;

    transform.Rotate(0, x, 0);
    transform.Translate(0, 0, z);

}
void Update()
{
    death();
    playerWalk();

}

}

问题是您可能已经猜到了,我的触发器不起作用。我的健康=健康-20;线路有效,但我的 rb.addforce 没有。

这里可能是什么问题?谢谢 :)

编辑2#

只想编辑这个并说我已经解决了问题。问题是我的浮点值不够高 xD

标签: c#unity3d

解决方案


在您编写代码段时,“rb”不是一个字段,而是“Start”方法中的一个局部变量。如果您在指定行中遇到异常,可能是因为这个。如果您希望 'rb' 成为一个字段,所有类方法都可以访问,则需要在类主体中声明它,如下所示:

public int health;
private float knockback;
private RigidBody rb;

// (...) the rest of your code

如果不是这种情况,请告诉我并向我们提供有关您的问题的更多信息。


推荐阅读