【Unity】TruncateTextで長いテキストを省略する

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと次のようなプログラミングができるようになります

10文字や20文字のような長いUIテキストを画面に表示するとき、文字数制限をしてそれ以上は「…」で省略をします。

UnityのUIテキストを使って長い文章を表示するとき、画面内に収まりきらない場合があります。

例えば、「こんにちは。」と画面に表示したいけれども、大きさの関係で「こんに」と途切れてしまいます。
一例では、簡単に5文字でしたが、10文字、20文字と文字数が増していくと画面内に収まらず、文字を小さくする苦渋の決断をしなければいけません。

しかし、画面に収まらなかった場合は、テキストを一定の文字数以上に制限して、省略を意味する「…」などを付けることで、文字が省略されてもあまり違和感がありません。

本記事では、一定の文字数以上は制限して、以降は省略記号を付ける方法を紹介します。

本記事は次の人におすすめ
  • UnityでUIテキストを使う人
  • UnityでTruncateTextの使い方を知りたい人
  • UIテキストの省略のスクリプトを書きたい人
Udemyで学習する
スポンサーリンク

TruncateText

例えば、以下のようなコードを考えます。

string originalText = "アリッシアの朝はプログラミングを紹介するウェブサイトです。";
string truncatedText = TruncateText(originalText, 10);
Debug.Log(truncatedText); // 出力: "アリッシアの朝はプログラ..."

この時、「アリッシアの朝はプログラミングを紹介するウェブサイトです。」の文字の長さは24文字であり、切り詰めた文字列の長さは10文字です。

TruncateText」は、UnityでUIテキストの文字列を指定された長さに設定して、省略記号を付けます。

Truncateは切り詰めるという意味で、Unityでテキストを切り詰めるには、以下のような関数を使用します。

public static string TruncateText(string text, int maxLength)
{
    if (text.Length > maxLength)
    {
        text = text.Substring(0, maxLength);
        text += "...";
    }
    return text;
}

この関数は、切り詰めたい text と制限したい maxLength の2つのパラメータを取ります。

もし text の長さが maxLength を超えている場合、
text の先頭から maxLength 文字までの部分文字列を取得して切り詰めます。

その後、省略記号(”…”)を追加して、テキストが切り詰められたことを示します。

ソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;           //追加
public class AbbrWord : MonoBehaviour
{
    public Text Abbr;

    /// <summary>
    /// 一定の文字数以上は省略
    /// </summary>
    /// <param name="text">テキスト</param>
    /// <param name="maxLength">6文字以上</param>
    /// <param name="suffix">省略記号は「...」</param>
    /// <returns></returns>
    public string TruncateText(string text, int maxLength = 6, string suffix = "...")
    {
        if (text.Length <= maxLength)           //テキストが最大長以下である場合はテキストをそのまま
        {
            return text;
        }
        else                                    //テキストが最大長より大きい場合は最大長から省略記号分の文字を減らした数を表示
        {
            return text.Substring(0, maxLength - suffix.Length) + suffix;
        }
       
    }

    void Start()
    {
        int maxLength = 6;
        string suffix = "...";
        Abbr.text = TruncateText(Abbr.text, maxLength, suffix);
    }

}

UdemyでUnityを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。

\Unityの学習から収益化の方法はこちらから!/



解説

初めにUIテキストを使用するため名前空間に「using UnityEngine.UI;」を追加します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;           //追加

つづいて、変数を定義します。
「Abbr」はテキストUIの変数で、画面に表示する文字で省略します。
「maxLength」はint型の変数で、制限する文字数を指定します。
「suffix」はstring型の変数で、省略記号となります。

public Text Abbr;
int maxLength = 6;
string suffix = "...";

ここで関数「TruncateText」を作成します。

テキスト(Abbr)、最大長(maxLength)、そして省略記号(suffix)を指定して、テキストの長さが最大長以下である場合、テキストをそのままです。対して、テキストが最大長より大きい場合は最大長から省略記号分の文字を減らした数を表示します。

    public string TruncateText(string text, int maxLength = 6, string suffix = "...")
    {
        if (text.Length <= maxLength)           //テキストが最大長以下である場合はテキストをそのまま
        {
            return text;
        }
        else                                    //テキストが最大長より大きい場合は最大長から省略記号分の文字を減らした数を表示
        {
            return text.Substring(0, maxLength - suffix.Length) + suffix;
        }
       
    }

最後に、関数Start()にて、UIテキスト「Abbr」を表示します。

    void Start()
    {
        int maxLength = 6;
        string suffix = "...";
        Abbr.text = TruncateText(Abbr.text, maxLength, suffix);
    }

実演

完成したスクリプト「AbbrWord.cs」をHierarchyウィンドウにアタッチしてください。

また、Inspectorウィンドウの「Abbr」にHierarchyウィンドウの適当なUIをアタッチしてください。

再生ボタンを押すと冒頭で紹介したようになります。

まとめ

Unityの長いUIテキストを表示するとき、画面内に収まりきらないは、テキストを一定の文字数以上に制限して、省略を意味する「…」などを用いてます。その場合、UnityでUIテキストの文字列を指定された長さに設定して、省略記号を付けることができる「TruncateText」を使用します。

本製作はノベルゲームのようなテキストを扱うゲームの導入に最適です。

Udemyで学習する

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Unity
フォローする
タイトルとURLをコピーしました