0

C# を使用して統一されたテキストの幅を取得したい。

これが私がやろうとしていることです。

int GetWidthOfMessage(string message)
{
    int totalLength = 0;

    Font font = text.font; //text is my UI text
    CharacterInfo characterInfo = new CharacterInfo();

    char[] arr = message.ToCharArray();

    foreach (char c in arr)
    {
        font.GetCharacterInfo(c, out characterInfo, text.fontSize);
        totalLength += characterInfo.advance;
    }

    return totalLength;
}

しかし、 font.GetCharacterInfo(...) は false を返し、 characterInfo.advance は任意の文字に対して 0 です。

4

4 に答える 4

3

元の質問とは別に。これをすべて行っている理由に従います(テキストの内容に応じてテキストボックスを拡張します)。

テキスト オブジェクトでContent Size Fitterコンポーネントを使用し、Horizontal Fitプロパティを に設定できますPreferred Size。そして、これはあなたの問題を解決します。

アップデート:

レイアウト要素コンポーネントも追加し、優先幅の値をたとえば 500 に設定Horizontal Overflowし、テキストのプロパティを に設定しますWrap。これは確実に機能します。

于 2016-11-10T14:04:07.567 に答える
0

使用してみてください:font.RequestCharactersInTexture(c.ToString());

fontSize と fontStyle はデフォルト値を使用します。

そして使用します:GetCharacterInfo(char ch, out characterInfo info);

次に、 characterInfo.advance の正しい値を取得しました

于 2019-01-28T11:08:08.533 に答える