# Unity UI Text Font Size changes with the screen resolution Problem

I am working on a project and now I have a problem . The problem is the font size. The font size is OK inside the Unity but it is really small when I play the game on a real Android device .

My Canvas has 2 text (a and b) and 1 image .

I created an empty game object to hold that text.

Here is the code attached to empty game object :-

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Text_Script : MonoBehaviour
{

public Text My_Text_1 ;
public Text My_Text_2 ;

// Use this for initialization
void Start ()
{
My_Text_1.text = "Hello";
My_Text_2.text = "World";
}

// Update is called once per frame
void Update ()
{

}
}


Here are the images :-

Inside Unity

Inside a Android Device (here I uploaded the image from BlueStacks , I didn't use my mobile)

So why this is happening ?

I tried this :-

function Start()
{
var myText = GetComponent(GUIText);
// 50 is the fontsize you want to use
myText.fontSize = Mathf.Min(screen.height,screen.width)/50;
}


but I don't know where to put and on which object should I put those code And I am using Unity 5 and that code is for Unity 4.x .

I don't want to scale the font for a large size as explained in YouTube video (I don't think this is a good method)

So is there any ways to change the font size according to the screen size and resolution .

Thanks:)

GUIText is one of Unity's legacy GUI elements, pre-4.6, so this might feel outdated, but still works.

Define your base resolution height. Say you're working with a base height of 500 pixels:

var uiBaseScreenHeight:float = 500;


Now, what happens if the Android device's screen height is, say, 1500 pixels, which is 3x larger? You'd want to increase the font size:

// Dynamically determine the UI scale to use
var uiScale:float = Screen.height / uiBaseScreenHeight; // eg 1500 / 500 = 3

// Set the base font size
var baseFontSize:int = 16;

// Set the scaled font size
var scaledFontSize:int = Mathf.RoundToInt(baseFontSize * uiScale);

// Apply the scaled font size to the GUIText element
myText.fontSize = scaledFontSize;


And if you start working with GUITextures, you can adjust the pixelInset.width and pixelInset.height properties similarly by multiplying base widths and heights against uiScale.

C# example:

public float uiBaseScreenHeight = 500f;

private int GetScaledFontSize (int baseFontSize) {
float uiScale = Screen.height / uiBaseScreenHeight;
int scaledFontSize = Mathf.RoundToInt(baseFontSize * uiScale);
return scaledFontSize;
}

void Start () {
My_Text_1.fontSize = GetScaledFontSize(16);
}


The other method, is to use Unity's new UI Canvas and elements instead. Right-click in your Hierarchy and choose UI > Text. This will create a Canvas with a UI.Text element. Check the Canvas' CanvasScaler component and play around with it; make it use "Scale With Screen Size" and choose your base resolution.

• Thanks , Can you give me c# code . I am not good at JavaScript Jan 7, 2016 at 19:59
• How can I define uiBaseScreenHeight ? And Where should I attach that script ? Regards Jan 7, 2016 at 20:10
• I've added a C# example now. I think I was getting confused with your UnityScript example code at the bottom of your post, and overlooked that you were using C# with UI.Text above. If you use just the CanvasScaler with "Scale With Screen Size", you won't actually need to use any code at all to change font sizes. Jan 7, 2016 at 20:48
• But it is giving 3 errors . Error 1 :- Assets/Scripts/Text_Script.cs(16,17): error CS0127: Text_Script.GetScaledFontSize(int)': A return keyword must not be followed by any expression when method returns void Error 2 :- Assets/Scripts/Text_Script.cs(16,17): error CS0029: Cannot implicitly convert type int' to void' Error 3 :- Assets/Scripts/Text_Script.cs(25,27): error CS0029: Cannot implicitly convert type void' to `int' Jan 8, 2016 at 8:18
• Thanks :) But I solved it by Canvas Scaler UI Scale Mode . Thanks for your answer . Jan 8, 2016 at 10:15