- Home /
GUI.skin persisting through other OnGUI calls
Gday all,
I have made a GUI skin for a game I am working on and I have run into an issue. I have several scripts that call OnGUI so ideally I would like one initial script to set up the GUI for the whole game.
This worked initially when I was setting it like:
GUI.skin.button.something? = somevariable;
(I cant remember the aspect after .button that I would set...) this would set the normal button texture to the texture I assigned to somevariable and it would persist through the whole game. The issue was on mouse over, the buttons would revert to the unity default.
I have since made a separate GUI skin and use the following script:
#pragma strict
var cursorImage : Texture;
var standardSkin : GUISkin;
function Start () {
DontDestroyOnLoad (transform.gameObject);
Screen.showCursor = false;
}
function Update () {
}
function OnGUI(){
GUI.skin = standardSkin;
var mousePos : Vector3 = Input.mousePosition;
var pos : Rect = Rect(mousePos.x,Screen.height - mousePos.y,40,40);
GUI.Label(pos,cursorImage);
}
This now doesnt work and to get the skin applied I have to apply it to each individual script OnGUI. When it is applied to individual GUI scripts it works great though! Does anyone know how to fix this? Assistance much appreciated!
I don't know a solution to this, but I highly recommend only having one master OnGUI function - let that function call out to other functions as necessary. That way you don't have as much overhead with OnGUI calls, and there should be less worry about order of operation and all that. $$anonymous$$y two cents. :)
Answer by Eric5h5 · Sep 25, 2012 at 12:50 AM
Yes, you have to apply it to each OnGUI function; it's not something that needs to be fixed, that's the way it works. I'd recommend getting the skin from a central location (using a singleton or some other method), instead of having it on each script.