【问题标题】:Stop Rigidbody Movement/Rotation instantly after collision碰撞后立即停止刚体移动/旋转
【发布时间】:2017-04-02 09:07:22
【问题描述】:

我希望我的球体从一个位置跳到另一个位置,但不希望它在之后平移。我不知道该怎么做。这是我的代码:

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;
    }
}

【问题讨论】:

  • “翻译”是什么意思?你在翻译球的地方有更多代码吗?如果是这样,你应该添加它
  • 否,但 AddForce 正在翻译。
  • 如果我理解得很好,您希望球在触地后立即停止?
  • 是的,这正是我想要的。
  • 如果球和地面都有Colliders,则可以检测到两者之间的碰撞并冻结球的Transform。

标签: c# unity3d


【解决方案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;
    }
}

方法二:

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

转到资产 > 创建 > 物理材质

将 Bounciness 更改为 0。

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

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

【讨论】:

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