![見出し画像](https://assets.st-note.com/production/uploads/images/30601556/rectangle_large_type_2_9e9725b896978d5d4040ab382f94678f.png?width=1200)
Bolt で TextMesh Pro のテキストを書き換える~その2
BoltからTextMesh Pro uGUIのテキストの更新、同処理のC#での対比。
ついでにC#からBoltの変数にアクセスするメモです。
シーンや、変数などは以下の記事で作成したものを流用しています。
Flow Machineは以下のようになっています。
枠で囲ったブロック別に概要を説明します。
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でサンプルプロジェクトを公開しています。