实际上,我正在开发一个无尽的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);
}
}
尝试此操作,但我无法将停放的汽车再次撞到地面。请在这里帮助我。
答案 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;
}