【Unity】UIテキスト表示と使い方ー画面を押して文字を変える

サムネイル
当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

画面を左クリックするごとに、読み込んだcsvファイルのデータを表示する。

Unityで動作を確認するときに、Debug.Log()をしますが、
これは何の処理が実行されたか把握するものです。

consoleウィンドウはシステムが稼働しているか確認するだけで、
ゲームを出力(「Build」ビルド)したときは表示されることはありません

要するに、ゲームのプレイヤー(ユーザー)に文字を認識してもらうには、
UIテキストを使って文字を表示する必要があります。

本記事では、クリックの回数に応じて画面にテキストを表示します。
この機能は、ノベルゲームで使うことができます。

本記事は次の人におすすめ
  • 「Unity」のUI機能を使い方を知りたい。
  • 画面上に文字を表示したい。
  • ノベルゲームを作りたい。
Udemyで学習する
スポンサーリンク

UIテキスト

UI設置について

UIテキストは、Hierarchyウィンドウを選択し、UI、Textmeshproを選択することで導入できます。

Textmeshproの場所

現在は、Textmeshproを使うことが主流です。
ただし、デフォルトのままだと日本語対応していないので、設定する必要があります。

UIテキストの日本語表示を紹介しています。

画面にCSVテキストを表示する

画面表示について

ここからは、CSVテキストを画面に表示するスクリプトを解説します。
画面上にテキストを表示できても、コードで制御する必要があります。

csvの作り方と読み込みを紹介しています。

ノベルゲームにおいて管理したいものは、セリフだけではないです。
例えば、立ち絵やキャラクターボイス、効果音などがあります。

これら画像や音楽もcsvで管理することができます。

パスを使ってcsvで素材を管理します。

ソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using TMPro;

public class csvReader : MonoBehaviour
{
    private TextAsset csvFile; // CSVファイルのテキストアセット
    private List<string[]> csvData = new List<string[]>(); // CSVデータのリスト
    int i = 0; // インデックスカウンター
    public TextMeshProUGUI Englishtext;
    public TextMeshProUGUI Japanesetext;

    void Start()
    {
        //csvファイル読み込み
        csvFile = Resources.Load("Sample") as TextAsset; 
        StringReader reader = new StringReader(csvFile.text); 

        while (reader.Peek() != -1)
        {
            string line = reader.ReadLine();
            csvData.Add(line.Split(','));
        }
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0)) // マウス左ボタンがクリック
        {
            //TextMeshProにcsvテキストを代入
            Englishtext.text = csvData[i][0]; 
            Japanesetext.text = csvData[i][1]; 

            if (i < csvData.Count - 1) // インデックスiがCSVデータの要素数未満の場合
            {
                i++; // インデックスをインクリメントする
            }
            Debug.Log(csvData[i][0] + csvData[i][1]);
        }
    }
}

UdemyでUnityを学習

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

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



解説

  • 名前空間

System.Collections:コレクション操作を行うために必要なクラスを提供。特にリストの使用に関連。
System.Collections.Generic:ジェネリックコレクションをサポートし、強い型付けのリストなどを利用するために必要。
UnityEngine:Unityの基本的なエンジン機能やオブジェクト操作のために必要。
System.IO:ファイル入出力を扱うためのクラスを提供。CSVファイルを読み込むために必要。
TMPro:TextMeshProを操作するために必要。ユーザーインターフェースのテキスト表示に用いる。

  • フィールド(メンバ変数)

csvFile:CSVファイルを保持するための変数。TextAsset型としてリソースから読み込んだファイルのデータを保持する。
csvData:CSVファイルから読み込んだデータを格納するリスト。各行をstring[]として分割し、リストに保存する。
i:CSVデータの行を指し示すインデックスカウンター。ユーザーがクリックした際に表示するデータを制御する。
Englishtext:TextMeshProのUI要素。英語のテキストを表示するために使用される。
Japanesetext:TextMeshProのUI要素。日本語のテキストを表示するために使用される。

カウントアップ(インデックスカウンター)について解説しています。
  • Startメソッド

シーンが開始された際に実行される。
Resources.Loadを使用してリソースフォルダ内の”Sample”という名前のCSVファイルを読み込み、StringReaderでその内容を行ごとに読み取る。

各行はカンマ(,)で区切られ、csvDataリストに格納される。

「csvData[i][0]」と「csvData[i][1]」は表計算ソフトでは、A行とB行に対応しています。

  • Updateメソッド

フレームごとに呼び出される。
マウスの左ボタンがクリックされると、csvDataの現在のインデックスiに対応する英語テキストと日本語テキストをそれぞれEnglishtextとJapanesetextに設定する。

さらに、インデックスiをインクリメントし、
次の行のデータを次回のクリックで表示できるようにする。

Public関数の操作、アクセス修飾子の違い

今回UIをpublicで定義しましたが、
場合によってはprivateの方が良いこともあります。

しかし、これらの使い方が分かっていない人も多いかと思います。

アクセス修飾子は、「public」・「private」・「protected」・「internal」など様々あります。

アクセス修飾子を解説しています。

ここでは、使う頻度の高い「public」・「private」を紹介します。

public

publicは、公開アクセス修飾子であり、クラスやメンバーに対して最も広範なアクセスを提供します。他のクラスやスクリプトから自由にアクセスできます。

スクリプトに、以下の変数を定義します。

public int num;
public Text txt;

これらの変数は、アクセス可能にするために、HierarchyウィンドウからUIをアタッチできます。

このように、他のクラスやスクリプトから参照や操作が必要な要素(変数、プロパティ、メソッド)を公開する際に使用します。

ここから、他のスクリプトからゲームオブジェクトの位置を取得したり、
関数を呼び出したりする場合に、対象のメンバーにpublic修飾子を付けることが一般的です。

publicの特徴

private

privateは、プライベートアクセス修飾子であり、クラス内でのみアクセスが可能です。

他のクラスやスクリプトからの直接的なアクセスはできません。
主に内部の実装の詳細を隠すために使用されます。

スクリプトに、以下の変数を定義します。

public int num2;
public Text txt2;

privateはクラスの内部でのみ使用される補助的な要素(変数、プロパティ、メソッド)、データの保護に使用されるので、Inspectorウィンドウからアクセスが不可能です。

privateの特徴

public・private比較

以上のことから2つのアクセス修飾子は次のように使い分けることができます。

アクセス修飾子特徴
public他のクラスやスクリプトから自由にアクセスできるようにするために使用。
他のスクリプトからゲームオブジェクトの位置を取得したり、関数を呼び出したりすることができる。
privateクラス内でのみアクセスが必要なメンバーを制限するために使用。
クラス内で使用される一時変数や、内部の実装に関連するメソッドで用いる。

実演

スクリプトに記載するソースコードを確認しましたので、
スクリプトをHierarchyウインドウの項目にアタッチしてください。

Inspectorウィンドウに表示されたPublic関数「Englishtext」・「Japanesetext」をHierarchyウインドウの項目のアタッチします。

アタッチが完了しましたら、再生ボタンを押して実行します。

冒頭で紹介したような動作ができれば成功です。

名前の行のセルを空白にすると何も読み込まれませんので、名前が表示されることはありません。
したがって、地の文を表示させる際は何も書かずにCSVを保存してください。

まとめ

今回は、画面のクリック回数に応じてUIテキストを進める方法を紹介しました。

「Unity」標準UIを使用するためには名前空間「using UnityEngine.UI;」をします。

UIテキストを変数として定義するときは、頭文字を大文字(「Text」)、画面上に表示(変数を代入)するときは全て小文字「.text」にします。

Udemyで学習する

この記事を書いた人

プロフィール

アリッシア

                 

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

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

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