Úvod

AidTech je 2D sci-fi akční adventura s logickými prvky zaměřená na příběh. Hlavními prvky této hry jsou vaše rozhodnutí, kterými ovlivňujete hru a příběh. Ke svému prospěchu využíváte teleportaci, laserové zbraně a energetické štíty. Projdete výzkumné komplexy, vesmírné lodě a zbytky civilizace roztroušené různě po vesmíru, aby jste zachránili to co je pro vás nejdůležitější. Více o hře

Ovládání GUI pomocí klávesnice Unity3D

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.