碰撞后立即停止刚体运动/旋转

时间:2017-04-02 09:07:23

标签: c# unity3d

我希望我的球体从一个位置跳到另一个位置但不希望它随后翻译。我无法弄清楚如何做到这一点。这是我的代码:

void Update()
{
    if (!thrown && ((Input.touchCount > 0 
    && Input.GetTouch(0).phase == TouchPhase.Ended) 
    || Input.GetMouseButtonDown(0)))
    {
        rb.isKinematic = false;
        rb.AddForce(new Vector3(0.0f, 15.0f, 5.0f) );
        thrown = true;
    }
}

1 个答案:

答案 0 :(得分:2)

有很多方法可以让对象在碰撞后立即停止。我会给你两种方式:

方法1

当您检测到碰撞时,将Rigidbody速度设置为0

如果对象也在旋转,请将angularVelocity设置为0

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        Rigidbody rbdy = collision.gameObject.GetComponent<Rigidbody>();

        //Stop Moving/Translating
        rbdy.velocity = Vector3.zero;

        //Stop rotating
        rbdy.angularVelocity = Vector3.zero;
    }
}

方法2

使用 Physic Material 来控制碰撞过程中的摩擦力。

转到资产&gt; 创建&gt; 物理材料

Bounciness 更改为0

动态静态摩擦更改为等于或大于1的值。

enter image description here

然后将其附加到Material上的Collider广告位。

enter image description here