UnityのTextMeshProで「テキストが空かどうか」を正しく判定する方法

UnityのTextMeshProで「テキストが空かどうか」を正しく判定する方法_アイキャッチ
目次

はじめに

UI を作っていると

  • 入力欄が未入力かチェックしたい
  • テキストが設定されていない場合は非表示にしたい
  • 空ならボタンを押せなくしたい

といった場面が必ず出てきます。

特にTextMeshProを使っていると「どのプロパティを見ればいいの?」と一瞬迷いがちです。

この記事では、表示用テキスト(TextMeshProUGUI) について正しい空判定の方法を解説します。

空文字かどうか判定する方法

TextMeshProで判定すべきプロパティは「text」です。この中身に何が入ってるかを判定してあげるだけでOKです。

この文字列が、

  • null
  • 空文字 ""
  • 空白や改行だけ

かどうかをチェックします。

表示用テキスト(TextMeshProUGUI)の空判定

ラベルや説明文などに使うTextMeshProUGUI(TMP_Text) の場合

using TMPro;

if (string.IsNullOrEmpty(textMeshProUGUI.text))
{
    // テキストは空
}

「string.IsNullOrEmpty」は何を判定しているのかというと

  • null
  • ""(完全な空文字

を「空」と判断しています。

注意点としてこの方法だと、

  • ” ” // スペースだけ
  • “\n” // 改行だけ

は 「空ではない扱い」になります。

ユーザー入力を扱う場合は空白だけの入力も「未入力」としたいことがほとんどです。

その場合は、「IsNullOrWhiteSpace」を使います。

using TMPro;

if (string.IsNullOrWhiteSpace(inputField.text))
{
    // 未入力(空・空白・改行)
}

このメソッドは、

  • null
  • ""
  • " "(スペースだけ)
  • "\n"(改行だけ)

を すべて空扱いしてくれます。入力チェックではこれ一択と言ってもいいぐらい便利です。
簡単に「text == "" 」で判定してしまうと一見動きますが、

  • null に弱い
  • 空白・改行を判定できない

という欠点があります。

安全な書き方をしたいのであれば

if (string.IsNullOrWhiteSpace(tmp.text))
{
    Debug.Log("テキストが未入力です");
}

のようにすると

  • null でも落ちない
  • 表示用・入力用どちらでも使える
  • 将来の仕様変更にも強い

バグや修正に強いコードにすることができます。

まとめ

TextMeshPro で「テキストが空かどうか」を判定するなら

使う場面おすすめ
表示テキストIsNullOrEmpty
入力チェックIsNullOrWhiteSpace
迷ったらIsNullOrWhiteSpace

UI の入力チェックは地味ですが、ここを雑にするとバグの温床になります。

TextMeshPro を使う場合はtext を string メソッドで判定する」
この基本だけ覚えておけばOKです。

よかったらシェアしてね!
目次