【Unity】UIのText変更にGetComponentは必要なのか?(図解)

この記事は約4分で読めます。

どうもなおゆです。

なぜ今更こんな超初歩的な部分の記事を書くのか?

久々にText周りのコードを書いてみたら、非常に混乱しました。なぜかというとGoogle検索でヒットする情報は様々なパターンが混在しており、GetComponent等の基礎知識が曖昧な私はさらに混乱したからです。そんなわけで未来の自分のために図解で解説を残しておきます。

今回のテーマ

TextScriptから変更する場合GetComponentは必要なのか?を図解で説明

スポンサーリンク

用意したオブジェクト

  1. 「ヒエラルキー → 空のオブジェクトを作成」で名前を「A_ScoreManager」に変更 。これがゲームの得点を管理するオブジェクトです。
  2. 「ヒエラルキー → UI → テキスト」で 名前を「B_Text」に変更。ここに得点を表示します。
  3. 「プロジェクト → Assets」で右クリック「作成 → C#スクリプト」名前を適当に変更

なお、それぞれ名前の頭にABが付いているのは説明用に分かりやすくしただけです。

Textを変更する2パターンを紹介

  1. GetComponentでtextを取得する方法( A_ScoreManagerにScriptアタッチ)
  2. GetComponentを使わない方法 ( A_ScoreManagerにScriptアタッチ)

GetComponentでtextを取得してTextを変更

それぞれの位置関係は↓のような感じです。

コードは↓のような感じです。よくあるのがUnityEngine.UIをつけ忘れてUnityに怒られることですね。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // <--忘れがち

public class Script : MonoBehaviour
{
    private Text C_text; 
    private int score = 100;

    void Start()
    {
        this.C_text = GameObject.Find("B_Text").GetComponent<Text>(); // textコンポーネントを取得
        C_text.text = score.ToString() +" 点"; // int型をstring型に変換
    }
}

コードを簡単に説明すると、FindB_Textオブジェクトを見つけGetComponentでそのtextを取得し「そこに得点を表示するんだよ」と指示をだしています。 これでスクリプトから動的に変更ができます。

これで正常に得点が表示されました。

GetComponentを使わないでTextを変更

パターン1では「ここに点数を表示したい」という場所をGetComponentを使って取得し、B_Textを変更しました。でもUnityには便利な機能があり、publicな変数を宣言してあげればインスペクター操作でコンポーネントまで取得できます。

関係図はパターン1と同じです。

↓のようにText型の変数C_textpublicにします。GetComponentの部分は不要ですので削除してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // <--忘れがち

public class Script : MonoBehaviour
{
    public Text C_text; // <--ここを変更
    private int score = 100;

    void Start()
    {
        C_text.text = score.ToString() +" 点"; // int型をstring型に変換
    }
}

インスペクターのC_textにオブジェクトを追加しましょう。

Unityの画面でいうと↓の画像です。A_ScoreManagerのインスペクター画面を開くと「なし(テキスト)」となっていますので、そこにB_Textをドラッグアンドドロップしてください。

こうすることでUnityに「このコンポーネントのtextに表示するんだよ」という事が伝わりますので、GetComponentを使わなくてもTextを変更できます。これも正常に表示されました。

もしここが違うとか、こうした方が良いなどありましたら教えてください。

コメント

タイトルとURLをコピーしました