- Home /
GUI Rect appears to give random values
I've got a `GUI.Window` set up with a static Rect declared at the top of my class, like such:
private const int MAP_WINDOW_ID = 2;
private const float MAP_WINDOW_HEIGHT = 590.0f;
private const float MAP_WINDOW_WIDTH = 825.0f;
private static Rect mapWindowRect = new Rect((Screen.width / 2) - (MAP_WINDOW_WIDTH / 2),(Screen.height / 2) - (MAP_WINDOW_HEIGHT / 2),MAP_WINDOW_WIDTH,MAP_WINDOW_HEIGHT);
I've been getting really random values for the calculated offset. I put a `Debug.Log(mapWindowRect)` on the `Start` method to verify and I'll get different values almost every time the game starts up. So, I'm obviously doing something wrong, where the height and width are maybe in the process of being set maybe?
Either way, here's my question:
Why is this happening, and how do I avoid it so I can center windows and other gui elements based on the user's screen rather than hard coded?
Answer by Yokimato · Oct 25, 2012 at 04:27 PM
Ok, I finally figured this out. Since the Rect was static and being initialized outside of the Awake or Start function, and because objects are not guaranteed to be created in the same order, the Rect appeared to give random values based upon what was created first--in this example, the Screen.Height & Screen.Width variables.
The fix: Making the Rect declaration equal null, and initializing the Rect to the calculated value in the Awake or Start function. Calculated fields involving constants only, should not be effected since order matters not.
Your answer
![](https://koobas.hobune.stream/wayback/20220613082718im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Rendering GUI.Buttons in the middle of the screen 5 Answers
how to get Gui in OnGUI function to resize with the window? 1 Answer
One Last GUI Question 1 Answer
How Do I Center A GUI Label? 5 Answers