Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

Font.RequestCharactersInTexture

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える
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 要求された文字で使用するサイズ(デフォルトの値である 0 の場合、フォントのデフォルトサイズを使用します)。
style 要求された文字のスタイル

説明

フォントテクスチャに文字を追加するリクエストします(ダイナミックフォントのみ)

注意: これが必要となる唯一のケースはカスタムのテキストレンダリングを実装したいときです。 文字列 characters の文字がフォントのフォントテクスチャと charecterInfo プロパティーにて すべて利用可能であると確認することを Unity にリクエストするため、この関数を呼び出しします。 これはカスタムのコードでダイナミックフォントをレンダリングすることを実装する場合に便利です。文字に対してカスタムのフォントサイズやスタイルを提供できます。 もし size が 0 の場合、フォントのデフォルトサイズを使用します。

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