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!

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.