111 lines
5.5 KiB
C#
111 lines
5.5 KiB
C#
// // ©2015 - 2025 Candy Smith
|
|
// // All rights reserved
|
|
// // Redistribution of this software is strictly not allowed.
|
|
// // Copy of this software can be obtained from unity asset store only.
|
|
// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
// // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// // THE SOFTWARE.
|
|
|
|
using System.Reflection;
|
|
using TMPro;
|
|
using UnityEditor;
|
|
|
|
namespace WordsToolkit.Scripts.Localization.Editor
|
|
{
|
|
public class TextMeshProReplacer : EditorWindow
|
|
{
|
|
[MenuItem("Tools/Replace TMP with LocalizedTMP")]
|
|
private static void ReplaceTextMeshProUGUI()
|
|
{
|
|
var selectedObjects = Selection.gameObjects;
|
|
|
|
if (selectedObjects.Length == 0)
|
|
{
|
|
EditorUtility.DisplayDialog("No Selection", "Please select at least one GameObject.", "OK");
|
|
return;
|
|
}
|
|
|
|
var replacedCount = 0;
|
|
|
|
foreach (var obj in selectedObjects)
|
|
{
|
|
var tmproComponents = obj.GetComponentsInChildren<TextMeshProUGUI>(true);
|
|
foreach (var tmproComponent in tmproComponents)
|
|
{
|
|
if (tmproComponent.GetType() == typeof(TextMeshProUGUI)) // Ensure we're not replacing already customized scripts
|
|
{
|
|
var localizeText = tmproComponent.GetComponent<LocalizeText>();
|
|
var instanceID = localizeText != null ? localizeText.instanceID : "";
|
|
|
|
// Store all relevant properties
|
|
var text = tmproComponent.text;
|
|
var font = tmproComponent.font;
|
|
var fontMaterial = tmproComponent.fontMaterial;
|
|
var color = tmproComponent.color;
|
|
var fontStyle = tmproComponent.fontStyle;
|
|
var fontSize = tmproComponent.fontSize;
|
|
var autoSizeTextContainer = tmproComponent.autoSizeTextContainer;
|
|
var enableAutoSizing = tmproComponent.enableAutoSizing;
|
|
var characterSpacing = tmproComponent.characterSpacing;
|
|
var wordSpacing = tmproComponent.wordSpacing;
|
|
var lineSpacing = tmproComponent.lineSpacing;
|
|
var paragraphSpacing = tmproComponent.paragraphSpacing;
|
|
var alignment = tmproComponent.alignment;
|
|
var enableWordWrapping = tmproComponent.enableWordWrapping;
|
|
var overflowMode = tmproComponent.overflowMode;
|
|
var isRightToLeftText = tmproComponent.isRightToLeftText;
|
|
var enableKerning = tmproComponent.enableKerning;
|
|
var extraPadding = tmproComponent.extraPadding;
|
|
var richText = tmproComponent.richText;
|
|
|
|
// Remove old component
|
|
DestroyImmediate(tmproComponent);
|
|
if (localizeText != null)
|
|
{
|
|
DestroyImmediate(localizeText);
|
|
}
|
|
|
|
// Add new component
|
|
var newComponent = obj.AddComponent<LocalizedTextMeshProUGUI>();
|
|
|
|
// Restore properties
|
|
newComponent.text = text;
|
|
newComponent.font = font;
|
|
newComponent.fontMaterial = fontMaterial;
|
|
newComponent.color = color;
|
|
newComponent.fontStyle = fontStyle;
|
|
newComponent.fontSize = fontSize;
|
|
newComponent.autoSizeTextContainer = autoSizeTextContainer;
|
|
newComponent.enableAutoSizing = enableAutoSizing;
|
|
newComponent.characterSpacing = characterSpacing;
|
|
newComponent.wordSpacing = wordSpacing;
|
|
newComponent.lineSpacing = lineSpacing;
|
|
newComponent.paragraphSpacing = paragraphSpacing;
|
|
newComponent.alignment = alignment;
|
|
newComponent.enableWordWrapping = enableWordWrapping;
|
|
newComponent.overflowMode = overflowMode;
|
|
newComponent.isRightToLeftText = isRightToLeftText;
|
|
newComponent.enableKerning = enableKerning;
|
|
newComponent.extraPadding = extraPadding;
|
|
newComponent.richText = richText;
|
|
|
|
// Set the instanceID using reflection (since it's private)
|
|
var fieldInfo = typeof(LocalizedTextMeshProUGUI).GetField("instanceID", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
if (fieldInfo != null)
|
|
{
|
|
fieldInfo.SetValue(newComponent, instanceID);
|
|
}
|
|
|
|
replacedCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
EditorUtility.DisplayDialog("Replacement Complete", $"Replaced {replacedCount} TextMeshProUGUI component(s) with LocalizedTextMeshProUGUI.", "OK");
|
|
}
|
|
}
|
|
} |