- Home /
OnGUi.RepeatButton true/false problem
i am tryin to two buttons ( up & down) where whan i hold the up button it would go up and when i release the button i would return to previous position and when i hold the down button it would go down and when release it would return to previous position . i tried using GUI.RepeatButton but that true/false everytime the button is hold, i need it to return false only when i release the button, was at this for a while but no break through hear is same code
void OnGUI () {
if (GUI.RepeatButton (new Rect (15, 70, 100, 40), "Up")) {
myTransform.Translate (Vector3.up * playerSpeed);
print ("Yes");
}
if (myTransform.position.y > 5.8f) {
myTransform.position = new Vector3 (myTransform.position.x, 5.8f, myTransform.position.z);
}
if (GUI.RepeatButton (new Rect (15, 150, 100, 40), "Dwn")) {
myTransform.Translate (Vector3.down * playerSpeed);
}
if (myTransform.position.y < -10.0f) {
myTransform.position = new Vector3 (myTransform.position.x, -2.0f, myTransform.position.z);
} else {
myTransform.position = Vector3.MoveTowards (myTransform.position, targetPos, jumpSpeed * Time.deltaTime);
print ("No");
}
i suspect my trouble is the "else" block but i dont know where to go from there. any help appreciated
Answer by AndreyL · Jun 11, 2014 at 05:44 PM
If I understood correctly, what you are asking is how to detect a change in the state of the button.
To do that, you can store it's last state outside of OnGUI and compare it to the new state.
bool upPressedLastFrame = false;
void OnGUI()
{
bool upPressedNow = GUI.RepeatButton(new Rect (15, 70, 100, 40), "Up");
if ( !upPressedLastFrame && upPressedNow ) {
Debug.Log("Up button pressed");
}
if ( upPressedLastFrame && !upPressedNow ) {
Debug.Log("Up button released");
}
if ( upPressedLastFrame && upPressedNow ) {
Debug.Log("Up button being held");
}
if ( !upPressedLastFrame && !upPressedNow ) {
Debug.Log("Up button not being held");
}
// update the last state
upPressedLastFrame = upPressedNow;
}
one problem is, is when i move the mouse while holding down the up button it changes back and forth from being press to not being press
i also tried doing the same for the down button but somehow im not getting it right, its not running as smooth as the up button was, can you update the above script with a down button implemented in it?