Version: 5.3 (switch to 5.4b)
ЯзыкEnglish
  • C#
  • JS

Язык программирования

Выберите подходящий для вас язык программирования. Все примеры кода будут представлены на выбранном языке.

Font.RequestCharactersInTexture

Предложить изменения

Успех!

Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.

Закрыть

Ошибка внесения изменений

По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста <a>попробуйте снова</a> через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.

Закрыть

Отменить

Руководство
public function RequestCharactersInTexture(characters: string, size: int = 0, style: FontStyle = FontStyle.Normal): void;
public void RequestCharactersInTexture(string characters, int size = 0, FontStyle style = FontStyle.Normal);

Параметры

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; } }