我该如何编写脚本来显示汽车的冲撞效果?

时间:2019-03-18 09:06:52

标签: unity3d

实际上,我正在开发一个无尽的3D赛车游戏,在城市景观中展示了一些停放的汽车,所以基本上我想要的是当我的玩家汽车与停放的汽车发生碰撞时,我希望停放的汽车旋转一些度,然后回到以前的0度或原始位置。

我只想举起停放的汽车,然后再次将地面恢复正常。因此,这将在游戏视图中显示一些逼真的效果。

由于我是单位开发的新手,因此您的帮助可以极大地帮助我。 到目前为止,我尝试过的是:

void OnTriggerStay(Collider other)
{
    if (gameObject.CompareTag("ParkedCar"))
    {
        Debug.Log("ParkedCar");
        Quaternion from, to;
        float inputValue = 0;
        inputValue += Input.GetAxis("Vertical") * 10 * 1;
        from = transform.rotation;
        to = Quaternion.Euler(0, inputValue, 0);
        gameObject.transform.rotation = Quaternion.Lerp(from, to, Time.deltaTime * 10f);
    }
}

即使我尝试过

void OnTriggerStay(Collider other)
{
    if (gameObject.CompareTag("ParkedCar"))
    {
        gameObject.GetComponent<Rigidbody>().AddForce(transform.right * 100, ForceMode.Impulse);

    }
}

尝试此操作,但我无法将停放的汽车再次撞到地面。请在这里帮助我。

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,则可以使用协程和OnTriggerEnter而不是OnTriggerStay来实现此目的,

private bool isDashed = false;
float time = 1.0f;
void OnTriggerEnter(Collider other)
{
    //Assuming your to quaternion is correct
    if (gameObject.CompareTag("ParkedCar") && !isDashed)
    {
        Debug.Log("ParkedCar");
        Quaternion from, to;
        float inputValue = 0;
        inputValue += Input.GetAxis("Vertical") * 10 * 1;
        from = transform.rotation;
        to = Quaternion.Euler(0, inputValue, 0);
        StartCoroutine(DashingCar(from, to));
    }
}
IEnumerator DashingCar(Quaternion from, Quaternion to)
{ 
    float elapsedTime = 0.0f;       
    while (elapsedTime < time) 
    {
        gameObject.transform.rotation = Quaternion.Lerp(from, to, elapsedTime / time);
        elapsedTime += Time.deltaTime;
        yield return null;
    }
    isDashed = true;        
}