I’m building a game for Android devices and I use GUI Buttons. Now this is the Js I use for the GUI Buttons;
var GuiButton : Texture2D;
var GuiButtonRollover : Texture2D;
private var correctedMousePosition : Vector2;
function OnGUI ()
{
correctedMousePosition = Vector2 (Input.mousePosition.x, (Screen.height-Input.mousePosition.y) );
if ( Rect(123,90,88,88).Contains(correctedMousePosition) )
{
GUI.DrawTexture( Rect(123,90,88,88) , GuiButtonRollover);
if( Input.GetMouseButtonUp(0) )
{
Application.LoadLevel("Scene here");
}
}
else
{
GUI.DrawTexture( Rect(123,90,88,88) , GuiButton);
}
}
Well this works perfect. But when I run the game on my Android Device and press on the GuiButton. The GuiButton changes it’s texture into GuiButtonRollover and when I release my finger from the button. The GUIButton wouldn’t change back into GuiButton.
Can someone help me please? This is a very important issue I have to fix.
Try using Update() to determine whether your rect contains the mousePosition. Also try to define your Rect on Awake() or Start(), since it doesn’t change in this case. I kind of rewrote this how I would go about doing it. I made a private variable to use inside of GUI.DrawTexture, it is determined which public texture will be drawn by mouseOver bool. Notice the ONLY thing I have in OnGUI() is the GUI code itself. This is because Update is called ONCE per frame, OnGUI is called TWICE per frame, which is part of your problem. Hope this helps.
#pragma strict
var GuiButton : Texture2D;
var GuiButtonRollover : Texture2D;
private var currentTexture : Texture2D;
private var rect : Rect;
private var mouse : Vector2;
private var mouseOver : boolean;
function Awake()
{
rect = new Rect(123, 90, 88, 88);
}
function Update()
{
mouse = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y);
mouseOver = rect.Contains(mouse);
if(mouseOver)
currentTexture = GuiButtonRollover;
else
currentTexture = GuiButton;
if(mouseOver && Input.GetMouseButtonUp(0))
{
Application.LoadLevel("Scene here");
print("X");
}
}
function OnGUI ()
{
GUI.DrawTexture(rect, currentTexture);
}