※このページではアフィリエイト広告を紹介しています

Unityでテキストメッシュプロのテキストをキー入力で切り替えるスクリプトを書いた!表示非表示を切り替えるスクリプトも

Unity

 

バーチャル3Dクリエイター神部まゆみです(*^-^*)

 

今日はUnityでテキストメッシュプロのテキストを切り替えるスクリプトを書いたよ。

あと、テキストメッシュプロのテキストの表示非表示を切り替えるスクリプトもね。

主に自分用だけど、誰かが参考にできるように公開しておく。

unity 2020.1.1で動作確認したよ。

■PR■

現在200個以上の新規unityアセットが最大50%オフで買える New Releaseセールをやっているみたいです。

unityアセット New Release割引 最大50%OFF

欲しいアセットはこの機会に買っておくと良いかも。

 
 

 

 

テキストを書き換えるスクリプトと、テキストメッシュプロを書き換えるスクリプトは違うみたい

この前テキストを書き換えるスクリプトは先輩たちのページを参考にして作れたんだけど、それだとテキストメッシュプロで設定したテキストは書き換えられなかったんだよね。

そもそも別オブジェクトで型も違うみたいだからダメっぽい。

従来のテキスト書き換えスクリプト

こちらに書いたけど、テキストメッシュプロのスクリプトと比較できるからここにも一応貼っておくよ。

UnityのuGUIでテキストを表示してギャルゲーっぽいのを作ろう2 テキスト変更やインスペクターオンオフなど
バーチャル3Dクリエイターの神部まゆみです(*^-^*)今日は昨日の続きでボタンを追加したり、クリックされたらテキストを変えたり、インスペクターとかをクリック検知でオンオフするところまでやるよ。スクリプト組むの初めてだから時間かかるかもしれ...
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キーを押されると、テキストが書き換わっていく感じ。

まぁ普通のテキストが表示できればいいのであれば、これを改変していけば事足りると思う。

詳しくはこのページに書いたから参考にしてね。

UnityのuGUIでテキストを表示してギャルゲーっぽいのを作ろう
バーチャル3Dクリエイターの神部まゆみです(*^-^*)今日はUnityでuGUI?とかいう機能を使って、画面にテキストを表示するよ。あのギャルゲーみたいな、下に半透明のウィンドウが出たりしてテキストが表示されるやつ。今えっちな動画を作って...

テキストメッシュプロのテキストをキー入力で切り替えるスクリプト

テキストとテキストメッシュプロで使い方が違うとは知らなかったから少し詰まっちゃったんだけど、こちらの頭のいい先輩のページを参考にしたらできたよ。

ありがとうございます(*^-^*)

【Unity】Text Mesh Proのテキストをスクリプトから表示・変更する - ニートの活動報告書
現在カードゲームを開発しているので、それを例に。TextMeshProを使ってカード名を表示させたいが、カードの種類毎に表示内容が変わるのでスクリプトでカード名の表示を管理しています。usingTMPro;publicclassCard:MonoBehaviour{privateTextMeshProUGUIcardN...
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。

テキストメッシュプロは、日本語をデフォルトで使えないみたいなので注意

普通のテキストだと日本語も行けるんだけど、テキストメッシュプロはダメみたい。

フォントアセットとかいうのを作れば、日本語を表示できるようになるよ。

こちらで書いたから参考にしてね。

unityのテキストアウトラインがぼやけるから変更したい!日本語フォントを入れて調整する
バーチャル3Dクリエイター神部まゆみです(*^-^*)unityでテキストを入れていたら、なんかアウトラインがぼやけた感じになっちゃったから調整したよ。同じところで悩んでる人は参考にしてね。現状:ちょっとぼやけてるというかジャギってるという...

まぁこんなページ見てる人は既に知ってる人が多いと思うけど、一応ね。

テキストメッシュプロのテキストをキー入力で表示非表示するスクリプト

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#はよく知らないからさ( ̄▽ ̄;)

 

まぁ参考にできるところがあれば参考にしてね。

 

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