- Home /
JavaScript GUI.Window OverPowers GUI.Button
Hey guys, i'm creating a horror game, i have had a GUI Skin made for this game. I have one problem, when applying the skin, the GUI.Window covers over the GUI.Buttons, and moves the position of them, please help, here are my scripts.
var mainMenuSceneName : String;
var pauseMenuFont : Font;
private var pauseEnabled = false;
var guiskin : GUISkin;
private var windowRect : Rect = Rect (Screen.width /2 - 100 ,Screen.height /2 - 100 ,250,200);
function Start(){
pauseEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
}
function Update(){
//check if pause button (escape key) is pressed
if(Input.GetKeyDown("escape")){
//check if game is already paused
if(pauseEnabled == true){
//unpause the game
pauseEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
GetComponent(MouseLook).enabled = true;
Screen.lockCursor = true;
}
//else if game isn't paused, then pause it
else if(pauseEnabled == false){
pauseEnabled = true;
AudioListener.volume = 0;
Time.timeScale = 0;
Screen.showCursor = true;
GetComponent(MouseLook).enabled = false;
Screen.lockCursor = false;
}
}
}
private var showGraphicsDropDown = false;
function OnGUI(){
GUI.skin = guiskin;
if(pauseEnabled == true){
//Make Main Menu button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 50,250,50), "Main Menu")){
Application.LoadLevel(mainMenuSceneName);
}
//Make Change Graphics Quality button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 ,250,50), "Change Graphics Quality")){
if(showGraphicsDropDown == false){
showGraphicsDropDown = true;
}
else{
showGraphicsDropDown = false;
}
}
//Make a background box
GUI.Window(0, windowRect, OnGUI, "Main Menu");
//Create the Graphics settings buttons, these won't show automatically, they will be called when
//the user clicks on the "Change Graphics Quality" Button, and then dissapear when they click
//on it again....
if(showGraphicsDropDown == true){
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 ,250,50), "Fastest")){
QualitySettings.currentLevel = QualityLevel.Fastest;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 50,250,50), "Fast")){
QualitySettings.currentLevel = QualityLevel.Fast;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 100,250,50), "Simple")){
QualitySettings.currentLevel = QualityLevel.Simple;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 150,250,50), "Good")){
QualitySettings.currentLevel = QualityLevel.Good;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 200,250,50), "Beautiful")){
QualitySettings.currentLevel = QualityLevel.Beautiful;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 250,250,50), "Fantastic")){
QualitySettings.currentLevel = QualityLevel.Fantastic;
}
if(Input.GetKeyDown("escape")){
showGraphicsDropDown = false;
}
}
//Make quit game button
if (GUI.Button (Rect (Screen.width /2 - 100,Screen.height /2 + 50,250,50), "Quit Game")){
Application.Quit();
}
}
}
#pragma strict
var InventoryEnabled = false;
private var windowRect : Rect = Rect (Screen.width /2 - 280 ,Screen.height /2 - 280 ,650,500);
var InvWindow : Texture;
var InvClose : Texture;
var Grids : Texture[];
var SideBar : Texture[];
var guiskin : GUISkin;
private var GridValue : float = -1;
function Update(){
if(Input.GetKeyDown("c")){
if(InventoryEnabled == true){
InventoryEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
GetComponent(MouseLook).enabled = true;
}
else if(InventoryEnabled == false){
InventoryEnabled = true;
AudioListener.volume = 0;
Time.timeScale = 0;
Screen.showCursor = true;
GetComponent(MouseLook).enabled = false;
}
}
}
function OnGUI ()
{
GUI.skin = guiskin;
if(InventoryEnabled == true)
{
GUI.Window(0, windowRect, OnGUI, "Inventory");
//Grid
GridValue = GUI.SelectionGrid(Rect(Screen.width / 2 - 280, Screen.height / 2 - 280, 500, 200), GridValue, Grids, 4);
//Side Bars
}
Answer by phodges · Nov 10, 2012 at 01:37 PM
Check out the documentation for GUI.Window. You can find it here:
http://docs.unity3d.com/Documentation/ScriptReference/GUI.Window.html
If you want to use a window in this way, then you should provide a separate function to handle drawing its content - at the moment you are passing it 'OnGUI'and that isn't a good idea.
//Make a background box
GUI.Window(0, windowRect, OnDrawMyWindow, "Main Menu");
You then implement "OnDrawMyWindow" so as to handle all of the controls that you want inside of it, removing them from OnGUI.
Your answer
Follow this Question
Related Questions
Stop clicking through a GUI window 2 Answers
Buttons in window problem 2 Answers
Custom GUI Button is Black 1 Answer
Window Background Image not showing 1 Answer
Dragging and Locking Buttons. 1 Answer