Unity3D v základu nepodporuje ovládání GUI pomocí klávesnice – pouze s myší. Tuto funkčnotst můžeme naprogramovat pomocí GUI.SetNextControlName a GUI.FocusControl.
Prvně nadeklarujeme pole, ve kterém uložíme naše názvy tlačítek a nadeklarujeme proměnou pro index právě vybraného tlačítka.
string[] buttons = new string[3] {"Start", "Options", "Exit" }; int selected = 0;
Potom ve funcki OnGUI přiřadíme jména pro další GUI element, kterým je tlačítko – toto děláme pro GUI focus, který poté vytvoříme pomocí GUI.FocusControl. To zařidí aby byl vybraný button podle indexu.
void OnGUI(){ GUI.SetNextControlName(buttons[0]); If(GUI.Button(new Rect(0,0,100,100), buttons[0]){ //when selected Start button } GUI.SetNextControlName(buttons[1]); If(GUI.Button(new Rect(0,100,100,100), buttons[1]){ //when selected Options button } GUI.SetNextControlName(buttons[2]); If(GUI.Button(new Rect(0,200,100,100), buttons[2]){ //when selected Exit button } GUI.FocusControl(buttons[selected]); }
Potom ve funkci Start přiřadíme defaultní vybraný prvek.
void Start(){ selected = 0; }
Poté potřebujeme vytvořit ovládání pro změnu indexu. Napíšeme si menší funkci.
int menuSelection (string[] buttonsArray, int selectedItem, string direction) { if (direction == "up") { if (selectedItem == 0) { selectedItem = buttonsArray.length - 1; } else { selectedItem -= 1; } } if (direction == "down") { if (selectedItem == buttonsArray.length - 1) { selectedItem = 0; } else { selectedItem += 1; } } return selectedItem; }
Potom funkci zavoláme ve funkci Update a přidáme pár podmínek v závislosti na vstupu.
void Update(){ if(Input.GetKeyDown(KeyCode.W)){ selected = menuSelection(buttons, selected, "up"); } if(Input.GetKeyDown(KeyCode.S)){ selected = menuSelection(buttons, selected, "down"); } }
A to je vše! Tady máte kompletní kód:
string[] buttons = new string[3] {"Start", "Options", "Exit" }; int selected = 0; void Start(){ selected = 0; } int menuSelection (string[] buttonsArray, int selectedItem, string direction) { if (direction == "up") { if (selectedItem == 0) { selectedItem = buttonsArray.length - 1; } else { selectedItem -= 1; } } if (direction == "down") { if (selectedItem == buttonsArray.length - 1) { selectedItem = 0; } else { selectedItem += 1; } } return selectedItem; } void Update(){ if(Input.GetKeyDown(KeyCode.W)){ selected = menuSelection(buttons, selected, "up"); } if(Input.GetKeyDown(KeyCode.S)){ selected = menuSelection(buttons, selected, "down"); } } void OnGUI(){ GUI.SetNextControlName(buttons[0]); If(GUI.Button(new Rect(0,0,100,100), buttons[0]){ //when selected Start button } GUI.SetNextControlName(buttons[1]); If(GUI.Button(new Rect(0,100,100,100), buttons[1]){ //when selected Options button } GUI.SetNextControlName(buttons[2]); If(GUI.Button(new Rect(0,200,100,100), buttons[2]){ //when selected Exit button } GUI.FocusControl(buttons[selected]); }
Snad se vám tento tutoriál líbil a něco vás naučil Napiště do komentářů co si o tom myslíte.