using UnityEngine; using UnityEngine.Rendering; namespace Vanguard.Board3D { /// Плоские подписи на столе без TMP и Canvas. internal static class BoardText { private static Font _font; public static Font Font { get { if (_font != null) return _font; _font = Resources.GetBuiltinResource("LegacyRuntime.ttf"); if (_font == null) _font = Resources.GetBuiltinResource("Arial.ttf"); if (_font == null) _font = Resources.GetBuiltinResource("Builtin-LegacyRuntime.ttf"); return _font; } } public static TextMesh Create( Transform parent, string text, float characterSize, Color color, Vector3 localPosition, float yaw = 0f, TextAnchor anchor = TextAnchor.MiddleCenter) { var go = new GameObject("Board Label"); go.transform.SetParent(parent, false); go.transform.localPosition = localPosition; // TextMesh по умолчанию смотрит в -Z; +90° по X кладёт его на стол. go.transform.localRotation = Quaternion.Euler(90f, yaw, 0f); var mesh = go.AddComponent(); mesh.font = Font; mesh.fontSize = 64; mesh.characterSize = characterSize; mesh.anchor = anchor; mesh.alignment = TextAlignment.Center; mesh.color = color; mesh.text = text; mesh.richText = false; var renderer = go.GetComponent(); if (mesh.font != null && mesh.font.material != null) renderer.sharedMaterial = mesh.font.material; renderer.shadowCastingMode = ShadowCastingMode.Off; renderer.receiveShadows = false; renderer.sortingOrder = 1; return mesh; } public static void SetText(TextMesh mesh, string text) { if (mesh != null) mesh.text = text ?? string.Empty; } public static void SetColor(TextMesh mesh, Color color) { if (mesh != null) mesh.color = color; } } }