UI changed in game affects prefab instances
Hi.
I'm doing a Unity exercise.
I created the menu and it works: I can change the font size, color, I can turn on SmallCaps Style, etc at runtime in the Options Menu.
However, when I do this, all the text elements that come from prefab instances get changed permanently. If I close the application and start again, these text elements show with the change color/size/caps style, etc. Other text elements that are not from the same ("my button") prefab instance are not affected.
What could be the reason for this? After every test run, I need to manually go through all my prefab instances (buttons) and set them back to their original font size, color, style.
I used TextMeshPro for this.
This is my OptionsManager class that handles the changes. (Irrelevant parts are left out to make it easier to focus on how the UI is changed.)
using TMPro;
using UnityEngine;
public class OptionsManager : MonoBehaviour
{
private class TextInfo
{
public TMP_Text Text { get; private set; }
public float DefaultSize { get; private set; }
public TextInfo(TMP_Text text)
{
Text = text;
DefaultSize = text.fontSize;
}
}
private TextInfo[] _allTexts;
private void Start()
{
var textElements = Resources.FindObjectsOfTypeAll<TMP_Text>();
var length = textElements.Length;
_allTexts = new TextInfo[length];
for (int i = 0; i < length; i++)
_allTexts[i] = new TextInfo(textElements[i]);
}
public void FontScaleChanged(float scale)
{
int nTexts = _allTexts.Length;
for (int i = 0; i < nTexts; i++)
_allTexts[i].Text.fontSize = _allTexts[i].DefaultSize * scale;
}
// ...
}