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

3
我希望我的球可以从一个位置跳到另一个位置,但之后不要移动。我无法想出如何实现。以下是我的代码:
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;
    }
}

你说的“翻译”是什么意思?你有更多的代码在翻译球吗?如果是这样,你应该把它添加进来。 - dogiordano
不是,但AddForce正在执行移动操作。 - solo365
如果我理解正确的话,您希望球在触地后立即停止? - Itération 122442
是的,那正是我想要的。 - solo365
如果球和地面都有“碰撞器”,您可以检测两者之间的碰撞并冻结球的“变换”。 - Hristo
1个回答

7
有很多方法可以让物体在碰撞后立即停止。我将为您提供两种方法:
方法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;
    }
}

方法二:

使用物理材质来控制碰撞过程中的摩擦力。

进入资产 > 创建 > 物理材质

反弹性更改为0

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

enter image description here

然后将其附加到Collider上的Material插槽中。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接