//============================================================================== // 関数 //============================================================================== /// <summary> /// テキストの表示範囲を可視化します /// </summary> public static void Show(float outlineSize, Color outlineColor) { var data = new TMP_RectVisualizerData ( outlineSize: outlineSize, outlineColor: outlineColor ); Show(data); }
/// <summary> /// テキストの表示範囲を可視化します /// </summary> public static void Show(TMP_RectVisualizerData data) { // すでに可視化している場合はいったん非表示にします Hide(); // すべてのシーンのルートオブジェクトを取得します var rootObjects = GetAllScenes() .SelectMany(c => c.GetRootGameObjects()) ; // すべての Text コンポーネントを取得します var textList = rootObjects .SelectMany(c => c.GetComponentsInChildren <Text>(true)) .OfType <MaskableGraphic>() ; // すべての TextMeshProUGUI コンポーネントを取得します var textMeshProUGUIList = rootObjects .SelectMany(c => c.GetComponentsInChildren <TextMeshProUGUI>(true)) .OfType <MaskableGraphic>() ; // Text と TextMeshProUGUI のリストを結合します var list = textList.Concat(textMeshProUGUIList); // アウトラインのサイズと色をキャッシュします var outlineSize = data.OutlineSize; var outlineColor = data.OutlineColor; foreach (var n in list) { // アウトラインを表示するためのゲームオブジェクトを作成します var go = new GameObject("Outline"); // テキストオブジェクトの子供にします go.transform.SetParent(n.transform); // アウトラインのゲームオブジェクトは Hierarchy に表示しないかつ // シーンに保存しない設定にします go.hideFlags = HideFlags.HideAndDontSave; // アウトラインを表示するためのコンポーネントをアタッチします go.AddComponent <CanvasRenderer>(); var squareUI = go.AddComponent <OutlineSquareUI>(); // アウトラインのサイズと色を設定します // また、タップ判定から除外します squareUI.raycastTarget = false; squareUI.OutlineSize = outlineSize; squareUI.color = outlineColor; // アウトラインのサイズをテキストオブジェクトに合わせます var rectTransform = go.GetComponent <RectTransform>(); rectTransform.anchoredPosition = Vector3.zero; rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.offsetMin = Vector2.zero; rectTransform.offsetMax = Vector2.zero; // 非表示にするためのリストに追加します m_list.Add(go); } }