手动施加汽车碰撞响应力

时间:2019-02-28 15:13:09

标签: unity3d

我想像这样在发生碰撞后向后扔车。 很少有碰撞示例,下图显示了其碰撞后向。

enter image description here

汽车以施加的速度行驶,而我连续施加速度以恒定速度行驶。刚发生碰撞时,我已经停止施加速度一段时间了,因此可以获得一些碰撞响应。

我想根据Bumper.io游戏获得碰撞响应: Bumper.io Part 1 (IOS/Android)

目前,我已经为此目的编写了一些代码,但是它的行为不完全是这样:

 void OnCollisionEnter(Collision other)
{
    if (other.gameObject.CompareTag(GameConstants.TAG_ENEMY) || other.gameObject.CompareTag(GameConstants.TAG_PLAYER))
    {
        elapsedEngineStartWaiting = 0f;
        StartCoroutine(ApplyReboundForce(other));
    }
}

IEnumerator ApplyReboundForce(Collision other)
{
    Vector3 centroid = new Vector3(0, 0, 0);
    foreach (ContactPoint contact in other.contacts)
    {
        centroid += contact.point;
    }
    centroid = centroid / other.contacts.Length;

    Vector3 projection = transform.position;
    projection.x = centroid.x;
    Vector3 normaliseCollisionPoint = Vector3.Normalize(projection - centroid);
    float collidedBodyMass = other.gameObject.GetComponent<Rigidbody>().mass;

    myRigidbody.velocity = Vector3.zero;
    myRigidbody.angularVelocity = Vector3.zero;

    int i = 0;
    while (i < 4)
    {
        myRigidbody.AddForce(normaliseCollisionPoint * GameConstants.CAR_COLLISION_IMPULSE * collidedBodyMass, ForceMode.Impulse);
        yield return new WaitForFixedUpdate();
        i++;
    }
}

我在上图中提到,目前,碰撞响应力的方向没有保持不变。 我要强制/施加上述方向。

给我一​​些建议,以便我能够执行建议的事情。

0 个答案:

没有答案