🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

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

Q&A

解決済

1回答

2244閲覧

UnityのGameビューのサイズで変動してしまうTextの正確な文字数が知りたい

mogeg_05

総合スコア5

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

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

0グッド

0クリップ

投稿2019/09/23 06:16

編集2019/09/25 02:11

UGuiのTextに入る正確な文字数が知りたいです。

Gameビューのサイズを変更すると、
Textコンポーネントに入力したテキストの
1行に収まる文字数が変動してしまいます。

Fontsizeは60で、1行に16文字表示するようにしたいと考えたので、
60*16=960なので、このTextのWidthは960にしたのですが、
添付画像のようにGameビューを縮小すると各行の末尾がずれ、
1行に入る文字数が増えることがあります。

第三者にこのText内に表示する文章を作成してもらうため、
このTextが何文字×何行を表示できるかということを
明確にしたいと考えています。

CanvasのCanvas Scalerは以下のように設定しています。
・UIScaleMode:Scale With ScreenSize
・Reference Resolution:x1920 y1080
・Screen Match Mode:Match Width Or Height
・Match:0
・Reference Pixels Per:100

作業環境でのGameビューのアスペクト比は16:9です。

Gameビューを縮小するとき、
インスペクタを見てもCanvasやTextに変化があるようには見えませんでした。
正確な文字数はどう判断すれば良いか、ご教授頂けないでしょうか。

イメージ説明


以下追記です。

下記のスクリプトを作成して、
TextGeneratorクラスの変数characterCountVisibleを使用して、
1行に表示される文字数を調べようとしました。

結果、行に表示される文字数は「17」とコンソールに表記されました。
16が表記されると考えていたので、混乱しています。

また、Gameビューのウィンドウサイズを変更することで、
変数lineCountは変動するのに対して、
characterCountVisibleは変動しません。

変数が「1行に表示されている文字数を示す」という認識が間違っているのでしょうか。

using UnityEngine; using UnityEngine.UI; using System.Collections; public class TestScript : MonoBehaviour { public Text textCounted; void Update () { if(Input.GetKeyUp("t")){ TextCount(); } } void TextCount(){ TextGenerator tg = textCounted.cachedTextGenerator; Debug.Log("行に含まれている文字数は"+tg.characterCountVisible+"です。"); Debug.Log("文字数は"+tg.characterCount+"です。"); Debug.Log("行数は"+tg.lineCount+"です。"); } }

イメージ説明


以下2回目の追記です。

ご教授いただいたコードをスクリプトに追加して、
Textのwidth・heightを変更して1行に収まる文字数を確認したところ、
Gameビューで確認できる文字数と同じ数値がコンソールに表示されました。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

文字数を厳密に探るならTextGeneratorクラスを使う形になると思います。
UnityEngine.TextGenerator - Unity スクリプトリファレンス

ただ根本原因としては、以下のいずれかかと思います。

  • ウィンドウが縮小される時にエリアとフォントサイズの計算誤差が発生して1文字多く入るとみなされてしまう
  • TextのWidthが可変になっている(親に追随するようになっている)
  • TextのBestFitがオンになっていて文字サイズが自動で変わるようになっている

確実に指定文字数で改行したいなら、そのようなスクリプトを組む(16文字毎に強制的に改行を入れるとか)必要があるかもしれません。

投稿2019/09/24 00:57

sakura_hana

総合スコア11427

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

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

mogeg_05

2019/09/24 04:06

ご回答ありがとうございます。 TextGeneratorクラスを使用して、1行に対する文字数を調べようと思ったのですが、 想定していたものを表示してもらえませんでした。 (質問文に詳細を追記しております) 根本原因として挙げて頂いたものについて、 2点目の「Widthが可変になっている」については、UIはCanvasの子になるので可変にならざるを得ないと思うのですが、そうではないのでしょうか。 3点目の「BestFitがオンになっている」は、オフになっているので当てはまりません。 1点目に関連するかもしれない事柄として、 Gameビューのアスペクトを実機想定の解像度(1920*1080)にすると、 文字がずれることがありませんでした。 このときの1行に含まれる文字数が正確なものとして考えて間違いないでしょうか。
sakura_hana

2019/09/24 07:33

「1行の文字数」はプロパティとして存在しないっぽいので (characterCountは表示しようとしている全文字数、characterCountVisibleは表示出来ている(はみ出していない)文字数のようです) 勘ですが「tg.lines[1].startCharIdx」(2行以上存在する必要があります) または https://github.com/tsubaki/HyphenationJpn_uGUI/blob/master/Assets/HyphenationJpn.cs 上記のGetFormatedTextメソッドを参考に「Text.preferredWidthがRectTransform.widhtを超える文字数」を探る感じでしょうか。 UIのWidth/Heightは固定にも可変にも出来ます。 https://docs.unity3d.com/ja/current/Manual/UIBasicLayout.html 上記ページをご覧の上、どの設定だとどうなるか実際に動かしてみると分かりやすいかと思います。 (こちらはGameビューを縮小というよりも「画面の縦横比を変える(4:3にしてみるとか)」だと分かりやすいかと思います。どんな解像度の画面にも対応する為の機能です) 基準値としては「実機想定の解像度の時」でいいと思います。 (万が一の為、エディタ以外にもビルドして確認するとベターかと思います)
mogeg_05

2019/09/25 02:07

ご回答ありがとうございます。 ご教授頂きました「tg.lines[1].startCharIdx」を使用することで、 1行内の文字数が表示されました。 (質問文に結果の画像を添付しました) UIのレイアウトに関するマニュアルの添付もありがとうございます。 アンカーを利用することで、親のWidth/Heightに影響を受けるということですね。 「実機想定の解像度」と「tg.lines[1].startCharIdx」を使用して、 文字数を確認していこうと思います。 (また、実際にビルドして確認もしてみます) この度はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問