- Home /
Problem with speed boost
I'm trying to make a simple speed boost pick up, but it doesn't work as it should. The speed increases, but it doesn't decrease. The code in OnTriggerEnter works fine, but the one in Update doesn't do anything. What am I missing? Did I do something wrong?
public class Bonus : MonoBehaviour {
public float bonusTime;
public float bonusGain;
private bool picked=false;
private float timer=0;
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
picked=true;
GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerMovement>().movementSpeed+=bonusGain;
gameObject.renderer.enabled = false;
}
}
void Update()
{
if (picked == true)
{
timer+=Time.deltaTime;
if(timer==bonusTime)
{
GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerMovement>().movementSpeed-=bonusGain;
Destroy(gameObject);
}
}
}
}
Answer by jgodfrey · Dec 06, 2014 at 10:52 PM
Your problem is likely to be in this line:
if(timer==bonusTime)
That's because it's unlikely those two values will ever be exactly equal. You probably want that to be:
if (timer >= bonusTime)
Jeff
Answer by bubzy · Dec 06, 2014 at 10:57 PM
i wrote a similar answer recently, i've modified it a little
//player Script
using UnityEngine;
using System.Collections;
public class playerScript : MonoBehaviour {
// Use this for initialization
private float speed = 2f;
private float health = 100f;
private float jumpHeight = 1f;
private float originalSpeed;
private float effectDuration;
private float currentDuration;
void Start () {
originalSpeed = speed;
}
// Update is called once per frame
void Update () {
if(originalSpeed != speed && Time.time > currentDuration)
{
speed = originalSpeed;
}
}
void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "powerup")
{
Debug.Log("PICKED UP POWERUP");
bonusPickup tempPowerup;
tempPowerup = collision.gameObject.GetComponent<bonusPickup>();
speed = tempPowerup.speedBonus;
health = tempPowerup.healthBonus;
jumpHeight = tempPowerup.jumpBonus;
effectDuration = tempPowerup.timeActive;
currentDuration = effectDuration + Time.time;
}
}
}
also a script on the powerup
using UnityEngine;
using System.Collections;
public class bonusPickup : MonoBehaviour {
// Use this for initialization
public float speedBonus;
public float healthBonus;
public float jumpBonus;
public float timeActive; //how long does this effect last in seconds.
void Start () {
//this can be a speedBoost although i would usually make prefabs for each one instead of coding
//that way you can make something like smallBoost = 4 bigBoost = 8 or whatever
speedBonus = 8f;
timeActive = 2f; //2 seconds
}
// Update is called once per frame
void Update () {
}
}
see if this helps at all.
Your answer
Follow this Question
Related Questions
Adding Speed to onTriggerEntered 1 Answer
Having a speed counter 2 Answers
Speed Affect Timer 1 Answer
Timer Progress Bar 2 Answers
Increasing the speed for a few seconds doesn't work. 1 Answer