How to increase the speed of the character in OnTriggerEnter function?

Hi everyone,

I’m trying to make a game similar to something like Doodle Jump:
The character move automatically up, with its speed that progressively decreases.

The issue that I encounter is with the stars, which are power-ups that boost speed for a small amount of time. I tried a lot of different things in the function OnTriggerEnter but it didn’t work at all (except adding force to the rigidbody, but consequently I have the game over GUI that appears even if the character still moves, since it thinks that currentSpeed == minSpeed in the Update without taking into consideration the rigidbody.AddForce in the OnTriggerEnter).

There’s my code:

// Speed of the Player (left and right movements)
var moveSpeed = 10f;  
var movement;
    

// Decrease-Increase speed (up)
var maxSpeed = 30.0;
var minSpeed = 0.0;
var maxAcceleration = 1.0; // Controls the acceleration
var maxAcceleration2 = 8.0; // Controls the acceleration
var currentSpeed = 30.0;
//var currentSpeed2 = 30.0;

        
// GUI that appears when Game Over    
var showGUI : boolean = false;

var iconGO : Texture2D;
var iconRetry : Texture2D;
var iconBack : Texture2D;
var positionGO :  Rect;
var positionRetry :  Rect;
var positionBack :  Rect;
            
                    
    
function Update() 
{  
	// gameplay Player (left and right)
    movement = Input.GetAxis("Horizontal") * moveSpeed;  
    movement *= Time.deltaTime;  
    transform.Translate(0.0f,0.0f, movement);
    
    
    // moving automatically up
    transform.Translate(Vector3.up * Time.deltaTime * currentSpeed);
    
    // decreasing speed
    if (currentSpeed > minSpeed)
    {
    currentSpeed -= maxAcceleration * Time.deltaTime;
    currentSpeed = Mathf.Clamp(currentSpeed, minSpeed, maxSpeed);
    }
    
    // when the character stops, GUI Game Over
    if (currentSpeed == minSpeed)
    {
    //Debug.Log ("YES"); //working (currentSpeed == 0.0)
    showGUI = true;
    }
    
}
    
            
function OnTriggerEnter(other: Collider)
{
    if (other.tag == "Stars")
    {
    	// Works but the GUI appears before the character stops (when it takes star(s)):
    	//rigidbody.AddForce (0, 300, 0);
    	
		//Debug.Log ("YES 02"); //working (collision)
		
		// one of the many tests that I tried:
		transform.Translate(Vector3.up * Time.deltaTime * maxSpeed);
		maxSpeed += maxAcceleration2 * Time.deltaTime;
    	maxSpeed = Mathf.Clamp(maxSpeed, minSpeed, currentSpeed);
    	
    	// an other one that I tried:
    	transform.Translate(Vector3.up * Time.deltaTime * currentSpeed2);
		currentSpeed2 += maxAcceleration2 * Time.deltaTime;
    	currentSpeed2 = Mathf.Clamp(currentSpeed2, minSpeed, maxSpeed);
    	
    }
}
	
	
	
function OnGUI()
{
	if(showGUI)
         
    {
    
		if(GUI.Button(positionGO, iconGO, "label"))
		{
			// Image Game Over
		}
		
		else if(GUI.Button(positionRetry, iconRetry, "label"))
		{
			// Button that reloads the current scene
			Application.LoadLevel("RUNNER");
		}
			
		else if(GUI.Button(positionBack, iconBack, "label"))
		{
			// Button that allows to go back to the menu
			Application.LoadLevel("MENU");
		
		}
		
	}
}

Maybe, to resolve it easily, is there a code that simply says “show me the GUI once my character stopped (so, not related to currentSpeed and minSpeed in the Update)” ?

Thanks in advance for all the help I can get !

Ok, I’m fairly new myself, so I’m kinda guessing, but what I think I would do would make it so when you got a star, it turned on a boolean, and while the boolean was active, currentSpeed = maxSpeed, and then use Time.deltaTime to figure out how long he had been boosted for.

function OnTriggerEnter(other: Collider)
{
    if (other.tag == "Stars")
    {
 var start : boolean = true;


//Right here is where we have the setup. All collecting the star will do is alter the speed you //are moving, and once 5 seconds has gone by, should revert back to normal. 
           if (star == true)
               {
                     timeCheck = 0;
                     currentSpeed = 50;
                     timeCheck += Time.deltaTime;
                               if (timeCheck >= 5)
                                         {
                                                 currentSpeed = 30;
                                                 star = false;
                                         }
               }
}
 
       transform.Translate(Vector3.up * Time.deltaTime * maxSpeed);
       maxSpeed += maxAcceleration2 * Time.deltaTime;
        maxSpeed = Mathf.Clamp(maxSpeed, minSpeed, currentSpeed);

Sorry if it’s not ideal or perfect, but it ought to work.