这是我尝试的但它似乎无法正常工作。有什么想法吗?
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的公共变量。
答案 0 :(得分:4)
似乎是因为您已经对您的速度变量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;
}
答案 1 :(得分:1)
如果您只想在物体处于触发范围内时提高速度,则可以在角色离开碰撞器后反转速度。
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "SpeedUp")
{
horizVel *= 10f;
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "SpeedUp")
{
horizVel /= 10f;
}
}
答案 2 :(得分:0)
虽然我是C#的初学者,但我的回答可能不正确,但你是否尝试为游戏对象分配一个id,该id应该使角色加速,然后在语句中调用它
if(other.gameObject.tag ==&#34; SpeedUp&#34;)
这可能是因为发动机无法计算发生碰撞的确切时刻