- Home /
GUITexture scaling with aspect ratio?
Hello good people of unity! I'm currently doing GUITexture. What I want to do is to make the texture scale according to the aspect ratio (if that makes sense)? What I mean is that if I have a GUITexture (that acts as button) is of size dimension 232 x 106 pixels in a 1920 x 1080 (16:9) screen by default, i want the texture to be smaller size in a smaller screen/resolution (lets say a screen of 1024 x 768 (4:3)) BUT I don't want that texture to be squashed.
Because previously my GUI were created by using ONGUI() and it was squashed when i switched to a smaller resolution. Eg.
void ResizeGUIMatrix()
{
// http://answers.unity3d.com/questions/359320/relate-font-size-to-screen-size-in-guiskin.html
// Set matrix
Vector2 ratio = new Vector2(Screen.width/defaultScreenRes.x , Screen.height/defaultScreenRes.y );
Matrix4x4 guiMatrix = Matrix4x4.identity;
guiMatrix.SetTRS(new Vector3(1, 1, 1), Quaternion.identity, new Vector3(ratio.x, ratio.y, 1));
GUI.matrix = guiMatrix;
}
void OnGUI()
{
// Resize GUI Matrix according to screen size
ResizeGUIMatrix();
DrawButtons();
// Reset matrix after finish
GUI.matrix = Matrix4x4.identity;
}
My research led me to [this][1].
And I tried all sorts of different things such as:
void Update ()
{
if (currentScr.y != Screen.height)
{
self.pixelInset = new Rect(
// (self.pixelInset.x / defaultScreenRes.x) * Screen.currentResolution.width,
// ((Screen.height - self.pixelInset.y) / defaultScreenRes.y) * Screen.currentResolution.height,
self.pixelInset.x,
self.pixelInset.y,
Mathf.RoundToInt( self.pixelInset.width * (float)(currentScr.y / Screen.height)),
Mathf.RoundToInt( self.pixelInset.height * (float)(currentScr.y / Screen.height)) );
Debug.Log("Result: "+((float)(currentScr.y / Screen.height)));
currentScr.Set(Screen.width, Screen.height);
}
}
But it still doesnt work. Can anyone help me out here? All help will be much appreciated thanks! :) [1]: http://answers.unity3d.com/questions/61213/build-is-changing-gui-positions.html
Answer by ODNSEV7N · Sep 16, 2013 at 05:55 AM
If its just GUI.Texture alone, set all the pixel insets to 0 in the inspector, set the scale to 0.1 or more on the x and y , so you can see it ( or it will be size 0 , 0.. (Invisible)).
Then in the SceneView, use the colored arrows to position the GUI.Textures. No code needed.
(Only with GUI.Textures though, GUI.Buttons etc need code to tell them where to be (because they are code).
This might not be the best/right way, but its the cleanest and easiest. (I think)
GoodLuck!