Files
RoomAwareVR/Assets/Editor/EditorUtils/TextConverter.cs
2025-05-26 00:46:28 +02:00

147 lines
5.0 KiB
C#

using System.Collections.Generic;
using System.Text;
using TMPro;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
public class TextConverter : MonoBehaviour
{
[MenuItem("Tools/Update Legacy Text")]
static void UpdateLegacyText()
{
Debug.Log("Converting Legacy Text to TMP");
Text[] allText = FindObjectsByType<Text>(FindObjectsSortMode.None);
Debug.Log($"Found {allText.Length} Legacy Text{(allText.Length > 1 ? "s" : "")}");
List<TextMigrator> migratorList = new List<TextMigrator>();
foreach (var t in allText)
{
TextMigrator migrator = new TextMigrator()
{
transform = t.transform,
textValue = t.text,
textSize = t.fontSize,
autoSize = t.resizeTextForBestFit,
textAlignment = t.alignment,
};
if (migrator.autoSize)
{
migrator.minSize = t.resizeTextMinSize;
migrator.maxSize = t.resizeTextMaxSize;
}
migratorList.Add(migrator);
DestroyImmediate(t);
}
StringBuilder sb = new StringBuilder();
foreach (var migrator in migratorList)
{
sb.AppendLine($" -Migrating {migrator.textValue} to TMP");
TMP_Text tmp = migrator.transform.gameObject.AddComponent<TextMeshProUGUI>();
tmp.text = migrator.textValue;
tmp.fontSize = migrator.textSize;
TMPAlignment alignment = GetAlignment(migrator.textAlignment);
tmp.verticalAlignment = alignment.verticalAlignment;
tmp.horizontalAlignment = alignment.horizontalAlignment;
if (migrator.autoSize)
{
tmp.enableAutoSizing = true;
tmp.fontSizeMin = migrator.minSize;
tmp.fontSizeMax = migrator.maxSize;
}
}
Debug.Log($"Legacy Text to TMP Conversion Complete\nUpdated Texts:\n{sb}");
}
static TMPAlignment GetAlignment(TextAnchor anchor)
{
switch (anchor)
{
case TextAnchor.UpperCenter:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Center,
verticalAlignment = VerticalAlignmentOptions.Top
};
case TextAnchor.UpperLeft:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Left,
verticalAlignment = VerticalAlignmentOptions.Top
};
case TextAnchor.UpperRight:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Right,
verticalAlignment = VerticalAlignmentOptions.Top
};
case TextAnchor.MiddleCenter:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Center,
verticalAlignment = VerticalAlignmentOptions.Middle
};
case TextAnchor.MiddleLeft:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Left,
verticalAlignment = VerticalAlignmentOptions.Middle
};
case TextAnchor.MiddleRight:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Right,
verticalAlignment = VerticalAlignmentOptions.Middle
};
case TextAnchor.LowerCenter:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Center,
verticalAlignment = VerticalAlignmentOptions.Bottom
};
case TextAnchor.LowerLeft:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Left,
verticalAlignment = VerticalAlignmentOptions.Bottom
};
case TextAnchor.LowerRight:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Right,
verticalAlignment = VerticalAlignmentOptions.Bottom
};
default:
return new TMPAlignment()
{
horizontalAlignment = HorizontalAlignmentOptions.Left,
verticalAlignment = VerticalAlignmentOptions.Top
};
}
}
}
public struct TextMigrator
{
public Transform transform;
public string textValue;
public int textSize;
public bool autoSize;
public int minSize;
public int maxSize;
public TextAnchor textAlignment;
}
public struct TMPAlignment
{
public HorizontalAlignmentOptions horizontalAlignment;
public VerticalAlignmentOptions verticalAlignment;
}