バーチャル3Dクリエイター神部まゆみです(*^-^*)
今日はUnityでテキストメッシュプロのテキストを切り替えるスクリプトを書いたよ。
あと、テキストメッシュプロのテキストの表示非表示を切り替えるスクリプトもね。
主に自分用だけど、誰かが参考にできるように公開しておく。
unity 2020.1.1で動作確認したよ。
テキストを書き換えるスクリプトと、テキストメッシュプロを書き換えるスクリプトは違うみたい
この前テキストを書き換えるスクリプトは先輩たちのページを参考にして作れたんだけど、それだとテキストメッシュプロで設定したテキストは書き換えられなかったんだよね。
そもそも別オブジェクトで型も違うみたいだからダメっぽい。
従来のテキスト書き換えスクリプト
こちらに書いたけど、テキストメッシュプロのスクリプトと比較できるからここにも一応貼っておくよ。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class SetText : MonoBehaviour { public Text title; public int page = 0; // Update is called once per frame void Update () { // z キーが押された時 if (Input.GetKeyDown(KeyCode.Z)) { if(page==0)title.text = "一回キーを押したよ"; if(page==1)title.text = "二回キーを押したよ"; if(page==2)title.text = "三回キーを押したよ"; page++; } } }
Text型のtitle変数を作って、Zキーが押されたらtitle.textで書き換えるシンプルな感じ。
一応使い方も
一応使い方を書いておくと、キャンバスを作ってそこにテキストを作っておいて、
空のオブジェクトを作成して(ここではSetTextって名前)スクリプトをアタッチして、キャンバスに作ったテキストオブジェクトをD&Dすれば使えるよ。
これでZキーを押されると、テキストが書き換わっていく感じ。
まぁ普通のテキストが表示できればいいのであれば、これを改変していけば事足りると思う。
詳しくはこのページに書いたから参考にしてね。



テキストメッシュプロのテキストをキー入力で切り替えるスクリプト
テキストとテキストメッシュプロで使い方が違うとは知らなかったから少し詰まっちゃったんだけど、こちらの頭のいい先輩のページを参考にしたらできたよ。
ありがとうございます(*^-^*)




using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class TextChange : MonoBehaviour { public TextMeshProUGUI TextBox; public int page = 0; // Update is called once per frame void Update () { // z キーが押された時 if (Input.GetKeyDown(KeyCode.Z)) { TextBox.color = Color.blue; if(page==0)TextBox.text = "一回押したよ."; if(page==1)TextBox.text = "二回も押せるなんてすごい!"; if(page==2)TextBox.text = "三回も!?えらいえらい♪"; page++; } } }
なんとなく、キーを押したら青色になるようにしたよ。
動かしたところ
テキストはまぁノリで(笑)。
従来のテキスト書き換えとの違い
- using TMProを宣言しておかないといけない
- 型がTextMeshProUGUIになった
くらいかな。
多分指定できるパラメーターとかも違うんだろうけど、今のところ使う必要に迫られていないからわかりません。
使い方は、空のオブジェクトにアタッチして、テキストメッシュプロのオブジェクトをD&DすればOK
どのスクリプトもこんな感じだと思うけどね。
TextChangeっていう名前で空のオブジェクトを作って、スクリプトをアタッチして、テキストメッシュプロのオブジェクトをD&Dしたところ。
これで実行すればOK。
テキストメッシュプロは、日本語をデフォルトで使えないみたいなので注意
普通のテキストだと日本語も行けるんだけど、テキストメッシュプロはダメみたい。
フォントアセットとかいうのを作れば、日本語を表示できるようになるよ。
こちらで書いたから参考にしてね。



まぁこんなページ見てる人は既に知ってる人が多いと思うけど、一応ね。
テキストメッシュプロのテキストをキー入力で表示非表示するスクリプト
Hキーが押されたらテキストメッシュプロのオブジェクトごとsetactiveで非表示にして、Aキーが押されたらsetactiveをtrueにして表示するようにしてあるよ。
HはHide、AはAppearみたいな感じで(笑)。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class TextHide : MonoBehaviour { public GameObject TextMP; //呼び出し時に実行される関数 void Start () { //テキストメッシュプロのオブジェクトを取得 TextMP = GameObject.Find("Text (TMP)"); } // Update is called once per frame void Update () { // Hキーが押されたらテキストを隠す if (Input.GetKeyDown(KeyCode.H)) { TextMP.SetActive(false); } // Aキーが押されたらテキストを出現させる if (Input.GetKeyDown(KeyCode.A)) { TextMP.SetActive(true); } } }
TextMP = GameObject.Find(“Text (TMP)”); の部分はテキストメッシュプロを作成した時のデフォルト名で指定してあるから、名前変えたら変更してね。
テキストメッシュプロのオブジェクトを取得すればいいだけみたいだから、型はGameObjectでいいみたい。
とりあえずこれで動いたから大丈夫だと思う。
動かしたところ
上で紹介したテキスト切り替えスクリプトと併用すると良い感じかも。
隠してる時にZキーを押してもpage変数がプラスされるので、表示させると次のテキストに移行するようです。
使い方は、空のオブジェクトにアタッチして、テキストメッシュプロのオブジェクトをD&DすればOK
まぁどのスクリプトも同じだね。
テキストメッシュプロのデフォルト名は、tと(の間に半角スペースがあるので注意!
テキストメッシュプロはデフォルト名が「Text (TMP)」なんだけど、tと(の間に半角スペースがあるみたい。
TextMP = GameObject.Find(“Text (TMP)”); の部分で半角スペースなしにしたら動きませんでした。
「半角スペースくらい、unityが考慮して上手くやってくれるでしょ」と思って実行してみたけどダメだったから、findは一字一句間違いなく指定しないとダメっぽい。
まぁコピペなら間違う心配はないけどね。
不安なら、TextMPとかにオブジェクトごとリネームして、コードを書き換えるのもいいかもね。
おわりに
とりあえず自分用に作ったやつだけど、調べれば案外書けるもんだね。
C言語とかPHPとかはやったことあるけど、C#はよく知らないからさ( ̄▽ ̄;)
まぁ参考にできるところがあれば参考にしてね。