i\'m trying to scale a GUI.TextArea.
the code block works in OnGui function. But when i change screen size , the textArea won\'t be on correct position and size.
The UI system in unity is very easy to use...
1) click add canvas .. select "scale with screen size"
(Note that this is in the "Canvas Scaler" section - it is NOT in the "Canvas" section.)
(2017 - note they recently changed the wording from "space" to "size"...)
The other options are irrelevant and almost never used.
2) click "Add Button", or add any element you want: panel. scroll view, slider, etc.
You're completely done.
It's that easy.
For a given item: to achieve what you say about POSITION, just do this ...
select the option relevant to you, probably middle one.
In your script have
public Text hello
That will create a slot (labelled "hello") in your Inspector panel for that script.
be sure to drag the physical .Text
unit (ie, underneath "Canvas") to that slot in the Inspector. To set the text, in code, is trivial:
hello.text = "some text here";
it's that simple. You can set the size, shape, position, etc of the type in the editor, what you see is what you get.
Be sure to set the following items ...
... as you need them. Cheers.
You should try to use new GUI / Canvases, but if you're determined to use the older immediate-mode GUI for some reason, you can do this:
public static Vector3 GUIScale{
get{
float normalWidth = 1024; //Whatever design resolution you want
float normalHeight = 768;
return new Vector3(Screen.width / normalWidth, Screen.height / normalHeight, 1);
}
}
public static Matrix4x4 AdjustedMatrix{
get {
return Matrix4x4.TRS(Vector3.zero, Quaternion.identity, GUIScale);
}
}
void OnGUI(){
GUI.matrix = AdjustedMatrix;
(... GUI drawing code ...)
}
Which will make the GUI always take up the same amount of the screen. It will work, but it might look pretty bad at higher resolutions and different screen aspect ratios than the "normal" one you design for. You'll also have to use the "normal" resolution numbers instead of Screen.width and Screen.height when drawing things.