- Home /
Creating SelectionGrid with each button tinted a different color
Is it possible to tint individual buttons of a GUI.SeletionGrid?
If not, to manually construct this, would looping through a bunch of buttons ever be interpreted oddly so that only one button is rendered at a time (instead of the entire grid):
Very rough pseudocode of what I mean:
for(var i:int=0;i<maxButtons;i++){ GUI.color = MyColor(i); // tints gui just for this button if(GUI.Button...) DoThis(i) }
Answer by Berenger · Feb 21, 2012 at 04:03 AM
I don't think SeletionGrid can do that.
So, with buttons, you'll need an int to know wich one is activated (simulate the SeletionGrid actually), and two styles. A classic one with normal-over-down and the one for the activated button with the down texture in the normal background (I'm not sure thats clear ...)
Why not to draw a semitransparent tinting texture over the grid with GUI.DrawTexture?
Answer by frogsbo · Jun 09, 2014 at 07:41 AM
do this, faster, makes a large mutlibutton grid and paint the buttons colors in art program:
Problem with that, is it uses 1 draw call per button, very slow, for like 10x10 buttons is 100 draw calls. here is a button using whatever texture you want, it returns number of button clicked on your texture:
function OnGUI(){
var gridpixels = 20;//pixels per grid square
var gidxsquares = 12;//num squares in x direction
if (GUI.Button(Rect(320,10,240,60),fctbutton,GUIStyle.none))
{
var xpos = Input.mousePosition.x - 320 ;
var ypos = Screen.height - Input.mousePosition.y -10;
var result = Mathf.Floor(xpos / gridpixels) + Mathf.Floor(ypos / gridpixels)*gidxsquares + 1;//plus 1 at end for not zero first square
//
print (result);
}
}
Your answer
Follow this Question
Related Questions
Clickable Scrollable List? 1 Answer
Making a text box appear after a certain gameObject is destroyed 0 Answers
Display problem with OnGUI 3 Answers
OnGUI Button 1 Answer