【问题标题】:AddForce doesn't work in UnityAddForce 在 Unity 中不起作用
【发布时间】:2017-07-14 18:13:27
【问题描述】:

我有以下脚本

public class SpeedUp : MonoBehaviour {

    public Rigidbody2D ball;

    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.tag == "Ball") {
            ball.AddForce(Vector2.left * 1000f);
            Debug.Log("ABC");
        }

    }

}

每次我运行游戏时,Debug.Log("ABC") 都会在控制台中打印 ABC,但刚体不会移动,它会保持原样。谁能解释一下为什么,因为我不明白为什么控制台打印工作并且刚体不动

这是球的代码

public class Ball : MonoBehaviour {

    public Rigidbody2D rb;
    public Rigidbody2D hook;
    public float releaseTime = 0.15f;

    private bool isPressed = false;

    void Update()
    {
        if (isPressed)
        {

            Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

            if (Vector3.Distance(mousePos, hook.position) > 2.5f)
            {
                rb.position = hook.position + (mousePos - hook.position).normalized * 2.5f;
            }
            else
            {
                rb.position = mousePos;
            }
        }
    }

    void OnMouseDown()
    {
        isPressed = true;
        rb.isKinematic = true;
    }

    void OnMouseUp()
    {
        isPressed = false;
        rb.isKinematic = false;
        StartCoroutine(Release());
    }

    IEnumerator Release()
    {
        yield return new WaitForSeconds(releaseTime);
        GetComponent<SpringJoint2D>().enabled = false;
        this.enabled = false;
    }
}

【问题讨论】:

  • 刚体是否标记为运动学?你能给我们看一下它的设置截图吗?
  • @Serlite 小球在鼠标不接触的时候是运动的,但是为了到达对撞机,小球必须用鼠标拉动,一接触就变成动态的
  • 代码本身没有问题 - 您的问题要么在于球的刚体是如何设置的,要么在于您所描述的鼠标和球的交互。
  • @ryemoss 我从球脚本中添加了代码
  • 如果球被拖入碰撞器,OnTriggerEnter 将在 isKinematic 变为 false 之前发生(当您释放鼠标时),并且 Force 将在对象仍处于运动状态时应用到对象。是这样吗?

标签: c# unity3d game-engine game-physics


【解决方案1】:

刚体不动可能是需要getComponenrt()

所以,在你的脚本中添加 void Start() 方法

公共类 SpeedUp : MonoBehaviour {

public Rigidbody2D ball;

void Start()
{
   ball = ball.GetComponent<Rigidbody2D>();
}

void OnTriggerEnter2D(Collider2D col)
{
    if (col.tag == "Ball") {
        ball.AddForce(Vector2.left * 1000f);
        Debug.Log("ABC");
    }

}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多