10文字や20文字のような長いUIテキストを画面に表示するとき、文字数制限をしてそれ以上は「…」で省略をします。
UnityのUIテキストを使って長い文章を表示するとき、画面内に収まりきらない場合があります。
例えば、「こんにちは。」と画面に表示したいけれども、大きさの関係で「こんに」と途切れてしまいます。
一例では、簡単に5文字でしたが、10文字、20文字と文字数が増していくと画面内に収まらず、文字を小さくする苦渋の決断をしなければいけません。
しかし、画面に収まらなかった場合は、テキストを一定の文字数以上に制限して、省略を意味する「…」などを付けることで、文字が省略されてもあまり違和感がありません。
本記事では、一定の文字数以上は制限して、以降は省略記号を付ける方法を紹介します。
- UnityでUIテキストを使う人
- UnityでTruncateTextの使い方を知りたい人
- UIテキストの省略のスクリプトを書きたい人
ConoHaWing開設方法|アリッシア
技術ブログを書くべき理由|アリッシア
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);
}
}
ブログを運営するメリット
プログラマーがブログを運営するメリットは沢山あります。
エンジニアはブログを運営するべき理由|アリッシア
- アウトプットによるスキル向上
- メモ帳代わり
- ポートフォリオ(案件獲得)
ブログを始めるためには、「テーマ」・「ドメイン」・「サーバー」の3つが必要です。
3つはブログ運営の基盤となる要素ですが、これら全て自分で用意しなければいけません。
面倒で難しくブログ開設を断念してしまう人が多いです。
ConoHa Wingの「WordPressかんたんセットアップ」は
最短10分で契約可能!
ConoHa WINGから契約をすれば、独自ドメイン、サーバーの用意、WordPressとの連携も簡単にできます。
さらに、2つの独自ドメインが永久無料の特典もあり、
月660円からの破格価格にもかかわらず、表示速度は国内最速です。
解説
初めに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」を使用します。
本製作はノベルゲームのようなテキストを扱うゲームの導入に最適です。