How can I get my GUILayout function calls to automatically draw with NO vertical spacing between controls?
I’m obviously not doing this correctly; these changes help but it’s certainly not producing zero vertical spacing: (I’m also not sure how to set ALL those GUI.Skin styles at once- seems wrong to do em all individually like that; think I’m missing some…)
GUI.skin.label.fontSize = 8;
GUI.skin.textField.fontSize = 8;
GUI.skin.textArea.fontSize = 8;
GUI.skin.box.fontSize = 8;
GUI.skin.button.fontSize = 8;
GUI.skin.toggle.fontSize = 8;
GUI.skin.window.fontSize = 8;
GUI.skin.label.margin = new RectOffset(0, 0, 0, 0);
GUI.skin.textField.margin = new RectOffset(0, 0, 0, 0);
GUI.skin.textArea.margin = new RectOffset(0, 0, 0, 0);
GUI.skin.box.margin = new RectOffset(0, 0, 0, 0);
GUI.skin.button.margin = new RectOffset(0, 0, 0, 0);
GUI.skin.toggle.margin = new RectOffset(0, 0, 0, 0);
GUI.skin.window.margin = new RectOffset(0, 0, 0, 0);
My Monobehvior objects do stuff like this to draw the GUI:
Had to adjust the “padding” field in addition to the margin. (My bad for only looking at the API section of the docs, not the manual section Unity - Manual: GUI Style (IMGUI System))
GUI.skin.label.padding = new RectOffset(GUI.skin.label.padding.left, GUI.skin.label.padding.left, 0, 0);
GUI.skin.textField.padding = new RectOffset(GUI.skin.textField.padding.left, GUI.skin.textField.padding.left, 0, 0);
GUI.skin.textArea.padding = new RectOffset(GUI.skin.textArea.padding.left, GUI.skin.textArea.padding.left, 0, 0);
GUI.skin.box.padding = new RectOffset(GUI.skin.box.padding.left, GUI.skin.box.padding.left, 0, 0);
GUI.skin.button.padding = new RectOffset(GUI.skin.button.padding.left, GUI.skin.button.padding.left, 0, 0);
GUI.skin.toggle.padding = new RectOffset(GUI.skin.toggle.padding.left, GUI.skin.toggle.padding.left, 0, 0);
GUI.skin.window.padding = new RectOffset(GUI.skin.window.padding.left, GUI.skin.window.padding.left, 0, 0);
Edit: I’ve learned that Directly modifying the GUI.skin values will SAVE these settings (which makes it a bit confusing to see what effect your changes are having). To avoid this, I created a new instance of a skin, using MySkin=Object.Instantiate<GUISkin>(GUI.skin);
Then modify the values of THAT skin:
MySkin.label.padding = new RectOffset(MySkin.label.padding.left, MySkin.label.padding.left, 0, 0);
Then, finally assign this new instance to the GUI.skin.