- Home /
Aspect ratio keeping guitexture scaling
I have made a simple script to scale my gui-textures in relation to my screen height and the texture aspect ratio but when I run it it scales my texture in a quadratic shape not in a rectangle. I tried to calculate the values myself and everything was right but somehow the program calculates wrong numbers.
I have read out the start values:
guiTexture.texture.width = 900
guiTexture.texture.height = 600
Screen.height = 879
sizeFactor = 3
the program calculates:
ratio = 1 <-- That is what confuses me :(
tHeight = 293
tWidth = 293
xInset = -146
yInset = -146
I hope you understand my problem and sorry for my bad english :).
Here is my code:
#pragma strict
var sizeFactor : int;
private var ratio : float;
private var tHeight : int;
private var tWidth : int;
private var xInset : int;
private var yInset : int;
function Start () {
ratio = guiTexture.texture.width / guiTexture.texture.height;
tHeight = Screen.height / sizeFactor;
tWidth = tHeight * ratio;
xInset = (tWidth / 2) * -1;
yInset = (tHeight / 2) * -1;
guiTexture.pixelInset = Rect(xInset,yInset,tWidth,tHeight);
transform.position = new Vector3(0.5,0.5,0);
}
function Update () {
tHeight = Screen.height / sizeFactor;
tWidth = tHeight * ratio;
xInset = (tWidth / 2) * -1;
yInset = (tHeight / 2) * -1;
guiTexture.pixelInset = Rect(xInset,yInset,tWidth,tHeight);
transform.position = new Vector3(0.5,0.5,0);
}
Answer by Baste · Oct 04, 2014 at 11:42 PM
As both the gui texture widht and height are integer values (int), this line:
ratio = guiTexture.texture.width / guiTexture.texture.height;
Uses integer division - meaning that results are rounded. If you cast the values to floats, you should get a proper ratio:
ratio = (float)guiTexture.texture.width / (float)guiTexture.texture.height;