質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

5318閲覧

unityでリッチテキストのバグの原因は

watosar

総合スコア18

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/06/12 06:05

編集2017/06/12 06:30

とあるUnityで作られたゲーム(取り合えず名前は伏せておきます)でチャットへ
<quad size=100
などと打ち込むと文字が大量に画面に表示されます。

Unity - マニュアル: リッチテキスト

quad

これはテキストメッシュのみに便利であり、画像をテキストとともにインラインでレンダリングします。画像のために使用するマテリアル、ピクセル単位での画像の高さ、そして 4 つほど画像を表示する四角形領域をあらわす数値を、引数としてとります。他のタグと異なり、quad はテキストを囲わず、終了タグがありません - スラッシュ記号は最初のタグの終わりに置かれ、“自己完結” を表現します。

<quad material=1 size=20 x=0.1 y=0.1 width=0.5 height=0.5 />

これにより、レンダラーのマテリアル配列の位置のマテリアルを選択し、画像の高さを 20 ピクセルに設定します。画像の四角形領域は x、y、幅、および高さの値で始まり、拡大縮小されていないテクスチャの幅および高さに対する比率として指定されます。

上の記事よりこのコマンドがリッチテキストなるものであるとは分かったのですが、
なぜこのコマンドが実行されるのか調べても分かりませんでした。

  • 表示されている文字からしてゲーム内で表示した文字の履歴のようなものが出力されているようなのですがなぜそれが指定されるのか(materialの指定がないのに)
  • なぜチャットへ打ち込むことで実行されるのか(他のリッチテキストに関しては運営さんの対策により使えません)

私自身はUnityを触ったことがなくどういうものなのか全く分かりません。
専門的なことでもいいので教えてください。(頑張って調べて理解します)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

なぜ謎の画像が表示されるのか

まずUnityの仕様上、前提として「描画される全ての要素はmaterialを使用する」必要があります。
テキスト(ダイナミックフォント)の場合は以下の仕組みで表示されます。
(uGUIの場合で説明しますがTextMeshの場合も同様です)

  1. Textコンポーネントのtextに文字列が与えられる。
  2. フォントファイルから必要な文字が抜粋され、テクスチャ(画像)が作られる。

(負荷軽減の為、複数の文字が集まって1枚の画像が作られる)
0. 作ったテクスチャがマテリアルに適用される。
0. テクスチャの必要な部分(実際に表示される文字)が抜粋されて表示される。

quadタグはこの3番・4番の部分を手動で行ってしまうタグなのではないかと思います。
数値を適当に指定した場合は2番のテクスチャ(直近で使用された文字)が表示されているものと思います。
(ちなみに3番で「マテリアルに適用される」とありますが、Textコンポーネントでマテリアルを指定していない時はUnityデフォルトのテキスト用マテリアルが使用されます)

この辺りは「SpritePackage」「ダイナミックフォント」「ビットマップフォント」について調べると理解しやすいかと思います。

#正直「テキストメッシュのみに便利」とありますが、私は基本的にuGUIしか使わないのでどう便利なのか私はさっぱり分かりません……分かる方がいましたらご指摘をお願いします。

なぜ実行されるのか

運営さんでないと分かりません……
TextコンポーネントのRichTextのチェックを外せば全てのリッチテキストを無効化出来ます。
そうではなくquadだけ使えるということは、RichTextは有効化しつつもユーザーの入力時(または表示時)に特定のタグを除去しているが、その除去リストからquadが抜けている、ということかと。
(他のリッチテキストタグを入力してもタグが文字として表示されないなら、この除去処理をしている可能性が高いです)
どちらにせよ運営さんに報告してあげると喜ばれると思います。

投稿2017/06/13 02:42

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

watosar

2017/06/13 11:01 編集

回答有難うございます!! 成る程... ただ、materialに何を入れても反応してくれないんですよねなんででしょう materialへ入れる数値の規則とかってあります? 運営さん海外の人でかつTwitterで反応してくれないんですぅ...おそらく<>で囲まれたものを正規表現で判別してるんだと思いますquadは囲わないので動くのでしょうね
sakura_hana

2017/06/13 12:15

>materialに何を入れても反応してくれない Text用のシェーダーを使用したマテリアルでないと動作しないかもしれないです。 「unity text シェーダー」辺りで調べてみてください。 >おそらく<>で囲まれたものを正規表現で判別 quadは閉じタグが無いのでその辺りが関係しているのかもしれません。 運営さんの反応が無いなら仕方無いので静観するしかないですね……
guest

0

間違えた....無視してくだせい

投稿2017/06/13 10:51

編集2017/06/13 10:53
watosar

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問