見出し画像

Bolt で TextMesh Pro のテキストを書き換える~その2

BoltからTextMesh Pro uGUIのテキストの更新、同処理のC#での対比。
ついでにC#からBoltの変数にアクセスするメモです。

シーンや、変数などは以下の記事で作成したものを流用しています。


Flow Machineは以下のようになっています。

画像1

枠で囲ったブロック別に概要を説明します。

Get Component TextMeshProUGUIブロック

Start Event で TextMesh Pro UGUIのコンポーネントを事前に探しています。
・TextStatusオブジェクトをシーンから検索して、
・TextMeshPriUGUIコンポーネントを取得して、
・シーン変数(tmpuGui_TextStatus)に保存しています。

この時に目的のオブジェクト、コンポーネントがきちんと見つかったかどうかを NullCheck ノードで検査しています。

見つからなかった場合は、DebugLogブロックでログに出力しています。

Bolt で TextMesh Pro のテキストを書き換える~その1」のように、事前に手動で直接TextMesh Pro UGUIのコンポーネント を tmpuGui_TextStatus に代入しておいても良いのですが、ここでは GameObject Findノードを用いて、オブジェクト名で見つける方法で作成しています。


Score Counterブロック

表示更新を確認する為に、単純に変数値(Score)を加算しているだけです。

Update TextMeshProUGUIブロック

ここで TextMesh Pro UGUIのテキストに Score の値を書き込んでいます。
書き込む先のTextMesh Pro UGUIは、Start Eventで検索&格納しておいた変数 tmpuGui_TextStatus を参照しています。


C#の場合

先のBoltのノード群をC#で書いた例が以下です。

using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Ludiq;
using Bolt;

public class ScoreCounter_MeshProuGui : MonoBehaviour {
   GameObject go_Obj;
   Transform tr_Obj;
   TextMeshProUGUI tmpuGui_TextStatus;
   void Start() {
       go_Obj = GameObject.Find("TextStatus");
       if (go_Obj == null) {
           Debug.Log("TextStatus is NULL");
           return;
       }
       tr_Obj = go_Obj.transform;
       if (tr_Obj == null) {
           Debug.Log("TextStatus is NULL");
           return;
       }
       tmpuGui_TextStatus = tr_Obj.GetComponent<TextMeshProUGUI>();
   }

   // Update is called once per frame
   void Update() {
       int score = (int)Variables.ActiveScene.Get("Score");
       score++;
       Variables.ActiveScene.Set("Score", score);
       tmpuGui_TextStatus.text = score.ToString();
   }
}


上のC#ソースでは Boltのシーン変数 Score にアクセスして加算する処理にしています。以下の部分がその処理です。

int score = (int)Variables.ActiveScene.Get("Score");
score++;
Variables.ActiveScene.Set("Score", score);

クラス Variables を用いることで、シーン以外のBoltの変数にもアクセスできます(Boltの変数名を文字列で指定するあたりは、ちょっとメカニムに似てます)。

Variables.ActiveScene.Get()の戻り値は Object型なようで、明示的なキャストが必要です(この辺はBolt2ではキャスト不要で、より安全な感じになるのではないかと思われます。多分)。

上図では Variables.ActiveScene を使用していますが、明示的にシーン名を指定することもできるようです(マルチシーン用かも)。
参考公式ドキュメント:Variables API


Bolt+C#

例えば、
・Boltでは Score値 をTextMeshProUGUI に表示を担当。
・Score値は C#で加算更新を担当。
のように、BoltとC#を組み合わせて使うことが可能です。

高速性が必要な処理はC#でプログラマが作成、GUIのデザイン性を重視&速度があまりいらない部分は Boltでデザイナーが作成、等のような分業がうまくできると良さそうですが。


サンプルのダウンロード

Git-Hubでサンプルプロジェクトを公開しています。


この記事が気に入ったらサポートをしてみませんか?