Unity/EditorWindow/TextMeshProUGUIのAutoSizeをonに変更
TextMeshProUGUIのAutoSizeをonに変更するツール
全てのシーンのTextMeshProUGUIのAutoSizeをonに変更するツールで、 現在のFontSizeをMaxサイズにし、Maxの1/10をMinサイズとする。Minは整数化する。
using UnityEditor;
using UnityEngine;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
using TMPro;
using System.IO;
public class ReplaceTextAutoSize : EditorWindow
{
private string directoryPath = "Assets/Scenes"; // シーンのデフォルトパス
[MenuItem("Tools/AutoSize TextMeshProUGUI")]
public static void ShowWindow()
{
GetWindow<ReplaceTextAutoSize>("AutoSize TextMeshProUGUI");
}
private void OnGUI()
{
GUILayout.Label("Directory Settings", EditorStyles.boldLabel);
directoryPath = EditorGUILayout.TextField("Directory Path", directoryPath);
if (GUILayout.Button("Enable AutoSize in Scenes"))
{
EnableAutoSizeInScenes();
}
}
private void EnableAutoSizeInScenes()
{
if (string.IsNullOrEmpty(directoryPath))
{
Debug.LogError("Please specify the directory path.");
return;
}
// 現在のシーンを保存し、そのパスを記録
Scene currentScene = EditorSceneManager.GetActiveScene();
string currentScenePath = currentScene.path;
if (currentScene.isDirty)
{
EditorSceneManager.SaveScene(currentScene);
}
// ディレクトリ内のすべてのシーンファイルを取得
string[] sceneFiles = Directory.GetFiles(directoryPath, "*.unity", SearchOption.AllDirectories);
foreach (string scenePath in sceneFiles)
{
// シーンを開く
Scene scene = EditorSceneManager.OpenScene(scenePath);
if (!scene.IsValid())
{
Debug.LogError($"Invalid scene path: {scenePath}");
continue;
}
// シーン内のすべての TextMeshProUGUI オブジェクトを探す
TextMeshProUGUI[] textMeshObjects = GameObject.FindObjectsOfType<TextMeshProUGUI>();
foreach (var textMesh in textMeshObjects)
{
// AutoSize を有効にし、最大サイズを設定
textMesh.enableAutoSizing = true;
textMesh.fontSizeMax = textMesh.fontSize; // 現在のフォントサイズを最大値に設定
// 最小サイズを最大サイズの1/10に設定(整数に丸める)
textMesh.fontSizeMin = Mathf.RoundToInt(textMesh.fontSizeMax / 10);
Debug.Log($"Enabled AutoSize on: {textMesh.gameObject.name} in scene: {scenePath} with max size: {textMesh.fontSizeMax} and min size: {textMesh.fontSizeMin}");
}
// シーンをダーティーにして保存
EditorSceneManager.MarkSceneDirty(scene);
EditorSceneManager.SaveScene(scene);
}
// 最後に元のシーンを再度開く
if (!string.IsNullOrEmpty(currentScenePath))
{
EditorSceneManager.OpenScene(currentScenePath);
}
Debug.Log("Finished enabling AutoSize for TextMeshProUGUI in all scenes.");
}
}