- Home /
[C#] Buttons through an Array.
Basically I'm trying to get access to a button in this array of strings/integers??
using UnityEngine;
using System.Collections;
public class CameraGUI : MonoBehaviour {
private int menuSelection = 0;
private string[] button=new string[] {
"Single Player",
"Multi Player",
"Leaderboards",
"Options"};
public GUISkin mainSkin;
static int startB=25;
static int buttonW=425;
static int buttonH=275;
private int windowW=500;
private int windowH=600;
private bool openWindow = false;
private int screenW=Screen.width;
void OnGUI() {
GUI.skin=mainSkin;
menuSelection=GUI.SelectionGrid(new Rect(startB,startB,buttonW,buttonH), menuSelection, button, 1);
}
public void SPOptionsWindow() {
//Displays the Singleplayer Window
GUI.Box (new Rect (screenW*14, Screen.height*(.25f/10.0f), windowW, windowH), "Single Player Pre-Start Options");
//Closes the Box
if(Input.GetKey (KeyCode.Escape))
openWindow=false;
if(Input.GetButton("B"))
openWindow=false;
//Click Within the Box
}
public void MPOptionsWindow() {
//Diplays the Multiplayer Window
GUI.Box (new Rect (screenW*14,Screen.height*(.25f/10.0f), windowW, windowH), "Multi Player Pre-Start Options");
//Closes the Box
if(Input.GetKey(KeyCode.Escape))
openWindow=false;
if(Input.GetButton("B"))
openWindow=false;
}
}
However, I cannot get the right idea of this. I would like to be able to click Single Player Option, and it open up a GUI box with different ways to play the game, changeable features, etc. before hitting the Start Button within the Box itself. Which will then go to the Application Level. I really do not understand arrays, so some help would be appreciated.
Answer by Habitablaba · Oct 18, 2014 at 09:27 PM
You're almost there... just check the value of menuSelection and call one of your methods based on the value. You can do this in a switch statement pretty easily:
switch(menuSelection)
{
// single player
case 0:
SPOptionsWindow()
break;
// multi player
case 1:
MPOptionsWindow()
break;
// leaderboards
case 2:
// code for leader boards here
break;
//options
case 3:
// code for options here
break;
default:
// error handling here
break;
}
I would also initialize menuSelection to something like -1, since 0 is a valid option. It is generally a good idea to initialize variables to values that are invalid for your game (but valid for the variable type, of course) This will help with debugging and error handling.
Thanks for the very fast reply, [edit] found where, however I can't get the window to pop-up when clicking a button. I used to have just
if(GUI.Button(new Rect(x,x,x,x), "Single Player"))
openWindow=true;
if(openWindow)
SPOptionsWindow(); is then called.
How would I do this and be able to close it in the same method?
I'm not super familiar with the built in GUI methods, and I'm on my phone away from my computer right now, but I'll give it a closer look later tonight / tomorrow. Sorry for the delay :)
That's alright, thanks though, you've definitely helped me out with this more than I could figure out!
Just to note something, I threw a debugger on the case options. When I click Single Player (I have it saying that it has been clicked for SP). However, it just continually increases in value. Until I click the $$anonymous$$ulti Player Button. Which informs me that I clicked $$anonymous$$P. Then that one continually increases lol. Not sure if this helps with anything.