10文字や20文字のような長いUIテキストを画面に表示するとき、文字数制限をしてそれ以上は「…」で省略をします。
UnityのUIテキストを使って長い文章を表示するとき、画面内に収まりきらない場合があります。
例えば、「こんにちは。」と画面に表示したいけれども、大きさの関係で「こんに」と途切れてしまいます。
一例では、簡単に5文字でしたが、10文字、20文字と文字数が増していくと画面内に収まらず、文字を小さくする苦渋の決断をしなければいけません。
しかし、画面に収まらなかった場合は、テキストを一定の文字数以上に制限して、省略を意味する「…」などを付けることで、文字が省略されてもあまり違和感がありません。
本記事では、一定の文字数以上は制限して、以降は省略記号を付ける方法を紹介します。
- UnityでUIテキストを使う人
- UnityでTruncateTextの使い方を知りたい人
- UIテキストの省略のスクリプトを書きたい人
TruncateText
「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 文字までの部分文字列を取得して切り詰めます。
その後、省略記号(”…”)を追加して、テキストが切り詰められたことを示します。
例えば、以下のようなコードを考えます。
string originalText = "アリッシアの朝はプログラミングを紹介するウェブサイトです。";
string truncatedText = TruncateText(originalText, 10);
Debug.Log(truncatedText); // 出力: "アリッシアの朝はプログラ..."
この時、「アリッシアの朝はプログラミングを紹介するウェブサイトです。」の文字の長さは24文字であり、切り詰めた文字列の長さは10文字です。
ソースコード
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);
}
}
思い通りのゲームが作れない
Unityでゲーム開発しているけど完成しない。
技術的な壁や知識不足が原因で、思い描いたゲームを実現するのは難しいです。
しかし、Udemyは動画で実践的なゲーム開発を解説していて、
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで学習できます。
Unityの機能を網羅したいや作りたいゲームがある人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を3つ紹介します。
ビックセール開催中(10月11日まで)
対象のコースが1500円から(最大95%OFF)
Unityのはじめの一歩としておすすめ。開発例に物理挙動やアニメーションを使用しているので、今後の開発が円滑になる。
トランプを題材にした講座。カードゲームやボードゲーム開発に応用可能
UnityエンジンのインストールやC#の文法に加えて、App StoreとGoogle Playにゲームをリリース方法を解説。
容量不足を解消
Unityのプロジェクトは1.5GB~3.5GBと大きく、クリエイターはHDD・SSD増設が必要です。
価格 | 耐久性 | 静音性 | 読み書き | サイズ | |
HDD | 低 | 低 | 低 | 遅 | 大 |
SSD | 高 | 高 | 高 | 速 | 小 |
注目点は、HDDは安価だけど壊れやすい。SSDは丈夫だけど高価。
したがって、データの持ち運びをしない場合はHDD、持ち運びする場合はSSDがおすすめです。
- 据え置きHDD
- 外付けSDD
- 内蔵SSD
ぜひ、あなたのクリエイティブな作業環境に兼ね備えたストレージをお役立てください。
解説
初めに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」を使用します。
本製作はノベルゲームのようなテキストを扱うゲームの導入に最適です。
本サイトではノベルゲームの作り方を紹介しています。あわせてご覧ください。