「Unity/EditorWindow/TextMeshProUGUIのAutoSizeをonに変更」の版間の差分
ナビゲーションに移動
検索に移動
| 1行目: | 1行目: | ||
==TextMeshProUGUIのAutoSizeをonに変更するツール== | ==TextMeshProUGUIのAutoSizeをonに変更するツール== | ||
全てのシーンとPrefabについて、TextMeshProUGUIのAutoSizeをonに変更するツールで、 | |||
現在のFontSizeをMaxサイズにし、Maxの1/10をMinサイズとする。Minは整数化する。 | 現在のFontSizeをMaxサイズにし、Maxの1/10をMinサイズとする。Minは整数化する。 | ||
| 13行目: | 13行目: | ||
public class ReplaceTextAutoSize : EditorWindow | public class ReplaceTextAutoSize : EditorWindow | ||
{ | { | ||
private string | private string directoryPathScenes = "Assets/Scenes"; // シーンのデフォルトパス | ||
private string directoryPathPrefabs = "Assets/Prefabs"; // プレハブのデフォルトパス | |||
private bool processScenes = true; // シーン処理のチェックボックス | |||
private bool processPrefabs = true; // プレハブ処理のチェックボックス | |||
[MenuItem("Tools/AutoSize TextMeshProUGUI")] | [MenuItem("Tools/AutoSize TextMeshProUGUI")] | ||
| 24行目: | 27行目: | ||
{ | { | ||
GUILayout.Label("Directory Settings", EditorStyles.boldLabel); | GUILayout.Label("Directory Settings", EditorStyles.boldLabel); | ||
// シーンのパス入力とチェックボックス | |||
processScenes = EditorGUILayout.Toggle("Process Scenes", processScenes); | |||
if (processScenes) | |||
{ | { | ||
directoryPathScenes = EditorGUILayout.TextField("Scenes Directory Path", directoryPathScenes); | |||
} | |||
// プレハブのパス入力とチェックボックス | |||
processPrefabs = EditorGUILayout.Toggle("Process Prefabs", processPrefabs); | |||
if (processPrefabs) | |||
{ | |||
directoryPathPrefabs = EditorGUILayout.TextField("Prefabs Directory Path", directoryPathPrefabs); | |||
} | |||
if (GUILayout.Button("Enable AutoSize in Selected Items")) | |||
{ | |||
EnableAutoSizeInScenesAndPrefabs(); | |||
} | } | ||
} | } | ||
private void | private void EnableAutoSizeInScenesAndPrefabs() | ||
{ | { | ||
if (string.IsNullOrEmpty( | if (processScenes && string.IsNullOrEmpty(directoryPathScenes)) | ||
{ | { | ||
Debug.LogError("Please specify the directory path."); | Debug.LogError("Please specify the scenes directory path."); | ||
return; | |||
} | |||
if (processPrefabs && string.IsNullOrEmpty(directoryPathPrefabs)) | |||
{ | |||
Debug.LogError("Please specify the prefabs directory path."); | |||
return; | return; | ||
} | } | ||
| 49行目: | 71行目: | ||
} | } | ||
// シーンの処理 | |||
if (processScenes) | |||
{ | |||
ProcessScenes(); | |||
} | |||
// プレハブの処理 | |||
if (processPrefabs) | |||
{ | |||
ProcessPrefabs(); | |||
} | |||
// 最後に元のシーンを再度開く | |||
if (!string.IsNullOrEmpty(currentScenePath)) | |||
{ | |||
EditorSceneManager.OpenScene(currentScenePath); | |||
} | |||
Debug.Log("Finished enabling AutoSize for TextMeshProUGUI in all selected items."); | |||
} | |||
private void ProcessScenes() | |||
{ | |||
// ディレクトリ内のすべてのシーンファイルを取得 | // ディレクトリ内のすべてのシーンファイルを取得 | ||
string[] sceneFiles = Directory.GetFiles( | string[] sceneFiles = Directory.GetFiles(directoryPathScenes, "*.unity", SearchOption.AllDirectories); | ||
foreach (string scenePath in sceneFiles) | foreach (string scenePath in sceneFiles) | ||
| 67行目: | 112行目: | ||
foreach (var textMesh in textMeshObjects) | foreach (var textMesh in textMeshObjects) | ||
{ | { | ||
// AutoSize | // AutoSize が無効のときのみ処理 | ||
textMesh.enableAutoSizing = true; | if (!textMesh.enableAutoSizing) | ||
{ | |||
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}"); | |||
} | |||
} | } | ||
| 79行目: | 127行目: | ||
EditorSceneManager.SaveScene(scene); | EditorSceneManager.SaveScene(scene); | ||
} | } | ||
} | |||
private void ProcessPrefabs() | |||
{ | |||
// ディレクトリ内のすべてのプレハブファイルを取得 | |||
string[] prefabFiles = Directory.GetFiles(directoryPathPrefabs, "*.prefab", SearchOption.AllDirectories); | |||
foreach (string prefabPath in prefabFiles) | |||
{ | { | ||
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath); | |||
if (prefab == null) | |||
{ | |||
Debug.LogError($"Invalid prefab path: {prefabPath}"); | |||
continue; | |||
} | |||
// プレハブ内のすべての TextMeshProUGUI オブジェクトを探す | |||
TextMeshProUGUI[] textMeshObjects = prefab.GetComponentsInChildren<TextMeshProUGUI>(true); | |||
foreach (var textMesh in textMeshObjects) | |||
{ | |||
// AutoSize が無効のときのみ処理 | |||
if (!textMesh.enableAutoSizing) | |||
{ | |||
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 prefab: {prefabPath} with max size: {textMesh.fontSizeMax} and min size: {textMesh.fontSizeMin}"); | |||
} | |||
} | |||
// プレハブを保存する | |||
PrefabUtility.SavePrefabAsset(prefab); | |||
} | } | ||
} | } | ||
} | } | ||
</pre> | </pre> | ||
2024年9月22日 (日) 00:24時点における最新版
TextMeshProUGUIのAutoSizeをonに変更するツール
全てのシーンとPrefabについて、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 directoryPathScenes = "Assets/Scenes"; // シーンのデフォルトパス
private string directoryPathPrefabs = "Assets/Prefabs"; // プレハブのデフォルトパス
private bool processScenes = true; // シーン処理のチェックボックス
private bool processPrefabs = true; // プレハブ処理のチェックボックス
[MenuItem("Tools/AutoSize TextMeshProUGUI")]
public static void ShowWindow()
{
GetWindow<ReplaceTextAutoSize>("AutoSize TextMeshProUGUI");
}
private void OnGUI()
{
GUILayout.Label("Directory Settings", EditorStyles.boldLabel);
// シーンのパス入力とチェックボックス
processScenes = EditorGUILayout.Toggle("Process Scenes", processScenes);
if (processScenes)
{
directoryPathScenes = EditorGUILayout.TextField("Scenes Directory Path", directoryPathScenes);
}
// プレハブのパス入力とチェックボックス
processPrefabs = EditorGUILayout.Toggle("Process Prefabs", processPrefabs);
if (processPrefabs)
{
directoryPathPrefabs = EditorGUILayout.TextField("Prefabs Directory Path", directoryPathPrefabs);
}
if (GUILayout.Button("Enable AutoSize in Selected Items"))
{
EnableAutoSizeInScenesAndPrefabs();
}
}
private void EnableAutoSizeInScenesAndPrefabs()
{
if (processScenes && string.IsNullOrEmpty(directoryPathScenes))
{
Debug.LogError("Please specify the scenes directory path.");
return;
}
if (processPrefabs && string.IsNullOrEmpty(directoryPathPrefabs))
{
Debug.LogError("Please specify the prefabs directory path.");
return;
}
// 現在のシーンを保存し、そのパスを記録
Scene currentScene = EditorSceneManager.GetActiveScene();
string currentScenePath = currentScene.path;
if (currentScene.isDirty)
{
EditorSceneManager.SaveScene(currentScene);
}
// シーンの処理
if (processScenes)
{
ProcessScenes();
}
// プレハブの処理
if (processPrefabs)
{
ProcessPrefabs();
}
// 最後に元のシーンを再度開く
if (!string.IsNullOrEmpty(currentScenePath))
{
EditorSceneManager.OpenScene(currentScenePath);
}
Debug.Log("Finished enabling AutoSize for TextMeshProUGUI in all selected items.");
}
private void ProcessScenes()
{
// ディレクトリ内のすべてのシーンファイルを取得
string[] sceneFiles = Directory.GetFiles(directoryPathScenes, "*.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 が無効のときのみ処理
if (!textMesh.enableAutoSizing)
{
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);
}
}
private void ProcessPrefabs()
{
// ディレクトリ内のすべてのプレハブファイルを取得
string[] prefabFiles = Directory.GetFiles(directoryPathPrefabs, "*.prefab", SearchOption.AllDirectories);
foreach (string prefabPath in prefabFiles)
{
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
if (prefab == null)
{
Debug.LogError($"Invalid prefab path: {prefabPath}");
continue;
}
// プレハブ内のすべての TextMeshProUGUI オブジェクトを探す
TextMeshProUGUI[] textMeshObjects = prefab.GetComponentsInChildren<TextMeshProUGUI>(true);
foreach (var textMesh in textMeshObjects)
{
// AutoSize が無効のときのみ処理
if (!textMesh.enableAutoSizing)
{
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 prefab: {prefabPath} with max size: {textMesh.fontSizeMax} and min size: {textMesh.fontSizeMin}");
}
}
// プレハブを保存する
PrefabUtility.SavePrefabAsset(prefab);
}
}
}