質問: とあるUnityで作られたゲーム(取り合えず名前は伏せておきます)でチャットへ > quad > > > これはテキストメッシュのみに便利であり、画像をテキストとともにインラインでレンダリングします。画像のために使用するマテリアル、ピクセル単位での画像の高さ、そして 4 つほど画像を表示する四角形領域をあらわす数値を、引数としてとります。他のタグと異なり、quad はテキストを囲わず、終了タグがありません - スラッシュ記号は最初のタグの終わりに置かれ、“自己完結” を表現します。 > > > > > > これにより、レンダラーのマテリアル配列の位置のマテリアルを選択し、画像の高さを 20 ピクセルに設定します。画像の四角形領域は x、y、幅、および高さの値で始まり、拡大縮小されていないテクスチャの幅および高さに対する比率として指定されます。 > > > 上の記事よりこのコマンドがリッチテキストなるものであるとは分かったのですが、 なぜこのコマンドが実行されるのか調べても分かりませんでした。 * 表示されている文字からしてゲーム内で表示した文字の履歴のようなものが出力されているようなのですがなぜそれが指定されるのか(materialの指定がないのに) * なぜチャットへ打ち込むことで実行されるのか(他のリッチテキストに関しては運営さんの対策により使えません) 私自身はUnityを触ったことがなくどういうものなのか全く分かりません。 専門的なことでもいいので教えてください。(頑張って調べて理解します)
回答: なぜ謎の画像が表示されるのか まずUnityの仕様上、前提として「描画される全ての要素はmaterialを使用する」必要があります。 テキスト(ダイナミックフォント)の場合は以下の仕組みで表示されます。 (uGUIの場合で説明しますがTextMeshの場合も同様です) 1. Textコンポーネントのtextに文字列が与えられる。 2. フォントファイルから必要な文字が抜粋され、テクスチャ(画像)が作られる。 (負荷軽減の為、複数の文字が集まって1枚の画像が作られる) 3. 作ったテクスチャがマテリアルに適用される。 4. テクスチャの必要な部分(実際に表示される文字)が抜粋されて表示される。 quadタグはこの3番・4番の部分を手動で行ってしまうタグ**なのではないか**と思います。 数値を適当に指定した場合は2番のテクスチャ(直近で使用された文字)が表示されているものと思います。 (ちなみに3番で「マテリアルに適用される」とありますが、Textコンポーネントでマテリアルを指定していない時はUnityデフォルトのテキスト用マテリアルが使用されます) この辺りは「SpritePackage」「ダイナミックフォント」「ビットマップフォント」について調べると理解しやすいかと思います。 #正直「テキストメッシュのみに便利」とありますが、私は基本的にuGUIしか使わないのでどう便利なのか私はさっぱり分かりません......分かる方がいましたらご指摘をお願いします。 なぜ実行されるのか 運営さんでないと分かりません...... TextコンポーネントのRichTextのチェックを外せば全てのリッチテキストを無効化出来ます。 そうではなくquadだけ使えるということは、RichTextは有効化しつつもユーザーの入力時(または表示時)に特定のタグを除去しているが、その除去リストからquadが抜けている、ということかと。 (他のリッチテキストタグを入力してもタグが文字として表示されないなら、この除去処理をしている可能性が高いです) どちらにせよ運営さんに報告してあげると喜ばれると思います。