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 !