characters | Доступ к массиву всех символов, содержащихся в текстуре шрифта. |
size | The size of the requested characters (the default value of zero will use the font's default size). |
style | The style of the requested characters. |
Запрос на добавление символов в текстуру шрифта (только для динамических шрифтов).
Заметка: Эта функция может вам понадобиться, только если вы хотите реализовать свою визуализацию текста.
Вызовите эту функцию, чтобы Unity гарантировал, что все символы в строке characters
доступны
в текстуре шрифта (и в его characterInfo
свойстве). Это полезно, когда вы хотите реализовать свой
код для визуализации динамических шрифтов. Вы можете передать свой размер шрифта и стиль символов. Если size
равен нулю
(значение по умолчанию), то будет использован стандартный размер для шрифта.
RequestCharactersInTexture может вызвать пересоздание текстуры шрифта, если в ней недостаточно места для добавления всех
запрошенных символов. При пересоздании текстуры шрифта, она будет содержать только символы, которые были использованы
в функции Font.RequestCharactersInTexture или в функциях визуализации текста Unity в последнем кадре. Поэтому
рекомендуется всегда вызывать RequestCharactersInTexture для любого текста на экране, который вы хотите визуализировать, используя
свои функции визуализации шрифтов, даже если символы уже представлены в текстуре, чтобы убедиться, что они
не будут удалены при пересоздании текстуры.
See Also: textureRebuilt, GetCharacterInfo.
no example available in JavaScript
using UnityEngine; using System.Collections;
public class CustomFontMeshGenerator : MonoBehaviour {
Font font; string str = "Hello World"; Mesh mesh;
void OnFontTextureRebuilt(Font changedFont) { if (changedFont != font) return;
RebuildMesh(); }
void RebuildMesh() { // Generate a mesh for the characters we want to print. var vertices = new Vector3[str.Length * 4]; var triangles = new int[str.Length * 6]; var uv = new Vector2[str.Length * 4]; Vector3 pos = Vector3.zero; for (int i=0; i<str.Length;i++) { // Get character rendering information from the font CharacterInfo ch; font.GetCharacterInfo(str[i], out ch);
vertices[4*i + 0] = pos + new Vector3 (ch.minX, ch.maxY, 0); vertices[4*i + 1] = pos + new Vector3 (ch.maxX, ch.maxY, 0); vertices[4*i + 2] = pos + new Vector3 (ch.maxX, ch.minY, 0); vertices[4*i + 3] = pos + new Vector3 (ch.minX, ch.minY, 0);
uv[4*i + 0] = ch.uvTopLeft; uv[4*i + 1] = ch.uvTopRight; uv[4*i + 2] = ch.uvBottomRight; uv[4*i + 3] = ch.uvBottomLeft;
triangles[6*i + 0] = 4*i + 0; triangles[6*i + 1] = 4*i + 1; triangles[6*i + 2] = 4*i + 2;
triangles[6*i + 3] = 4*i + 0; triangles[6*i + 4] = 4*i + 2; triangles[6*i + 5] = 4*i + 3;
// Advance character position pos += new Vector3(ch.advance, 0,0); } mesh.vertices = vertices; mesh.triangles = triangles; mesh.uv = uv; }
void Start () { font = Font.CreateDynamicFontFromOSFont("Helvetica", 16); // Set the rebuild callback so that the mesh is regenerated on font changes. Font.textureRebuilt += OnFontTextureRebuilt;
// Request characters. font.RequestCharactersInTexture(str);
// Set up mesh. mesh = new Mesh(); GetComponent<MeshFilter>().mesh = mesh; GetComponent<MeshRenderer>().material = font.material;
// Generate font mesh. RebuildMesh(); }
void Update () { // Keep requesting our characters each frame, so Unity will make sure that they stay in the font when regenerating the font texture. font.RequestCharactersInTexture(str); }
void OnDestroy() { Font.textureRebuilt -= OnFontTextureRebuilt; } }