I am using a texture to display text in a specific font and font size on the screen as a part of the GUI. The texture is too big because it covers the main character during game play. I’ve been trying to resize the texture in the start function, but the texture doesn’t display when I do. (The texture does display when I do not try to resize the texture) Here’s my code for resizing the texture:
var xGUITexture : Texture2D;
function Start (){
xGUITexture.Resize(Screen.width/2,Mathf.RoundToInt(Screen.width * 0.3),xGUITexture.format,true);
xGUITexture.Apply();
}
//[...]
Am I using the wrong texture format? What would cause the texture not to appear? (I’m not showing the calls for showing the texture because they are working with the texture when it is not resized).
Reading documentationdoes help: “After resizing, texture pixels will be undefined.”
So texture.Resize() does not rescale your texture, it simply changes the dimensions and provides the memory adaption, but deletes the content.
And since non-uniform scales of a GUI.Label’s Rect() are apparently (and unfortunately) ignored, your best option is to leave the texture alone, and scale your GUI:
function OnGUI(){
// store original matrix
var guiMatrix:Matrix4x4=GUI.matrix;
// where the label should be placed
var labelRect:Rect=Rect(xPos,yPos,xGUItexture.width,xGUItexture.height);
// scale GUI relative to current label size
var scaleFactor:Vector2=Vector2(
Screen.width/2 / labelRect.width,
Mathf.RoundToInt(Screen.width * 0.3) / labelRect.height);
// scale GUI around center of label
GUIUtility.ScaleAroundPivot(scaleFactor, labelRect.center);
// place label
GUI.Label(labelRect,xGUItexture);
// reset GUI scaling
GUI.matrix=guiMatrix;
// other GUI stuff, un-scaled
// [...]
}
As I said, I don’t really use UnityGUI, so no guarantees