在unity3d中,我有一个播放器,它以一定的速度不断向前移动,并且只控制它的左或右位置。
我希望我的播放器在遇到对象并启用触发器时立即加快速度。
这是我尝试过的方法,但似乎无法正常工作。有任何想法吗?
void Update ()
{
GetComponent<Rigidbody>().velocity = new Vector3(Input.GetAxisRaw("Horizontal") * 4, 0, horizVel);
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "SpeedUp")
{
GetComponent<Rigidbody>().velocity = new Vector3(Input.GetAxisRaw("Horizontal") * 4, 0, horizVel * 10.0f);
}
}
horizVel是将我的速度设置为10的公共变量。
最佳答案
似乎是因为您已经对速度变量OnTriggerEnter
方法进行了硬编码,而不是对其进行更新。
一帧调用一次更新。如果horizVel
设置为10,则每帧将以10的速度移动。
当您点击OnTriggerEnter
时,您的horizVel
更新为以前的10倍,即:100。
但是,由于您尚未更新速度变量,因此当您返回到Update
方法时,您的horizVel
将再次回到10。
我认为您应该尝试的是:
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "SpeedUp")
{
horizVel *= 10f;
}
}
这样,您的速度变量将仅在碰撞期间保持INSTEAD之前的10倍。
编辑
“我尝试过,但不仅在碰撞期间速度仍得到提高”
然后,您可以使用协程将速度变量重置回其原始值:
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "SpeedUp")
{
horizVel *= 10f;
StartCoroutine(ResetSpeedAfterTime(5f));
}
}
// Resets the speed variable back to the original value after a set amount of time
private IEnumerator ResetSpeedAfterTime(float time)
{
yield return new WaitForSeconds(time);
horizVel = 10f; // the original speed value;
}
关于c# - Unity3d瞬间加快玩家移动速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50621334/