ダメージ表示テキストを動的表示する

トップへ

参考ページ

概要

  1. ダメージ表示のテキストをUnityのUI(TextMeshPro)で作成
  2. ダメージテキストのPrefabを作る
  3. スクリプトでPrefabからテキストを生成

注意点としては生成したオブジェクトの親をCanvasにすること。
これをしないとオブジェクトは作られるが画面には表示されません。

以下の説明はCanvasのRenderModeが「Screen Space - Camera」であることを前提として書いています。
表示位置の説明に注意。

手順

ダメージ表示のテキストをUnityのUI(TextMeshPro)で作成

右クリック>UI>Text - TextMeshProで新規作成。
表示内容や文字色・サイズは適宜設定。

※TextMeshProの詳しい作り方は「TextMeshProで日本語フォントを表示」ページにて。

ダメージテキストのPrefabを作る

TextMeshProが作成できたらほかのオブジェクトと同様、ProjectビューにドラッグドロップするとPrefab化できる。
Prefab化したら、Assets/Resources フォルダに配置する(フォルダがなければ作る)

スクリプトでPrefabからテキストを生成

// TextMeshProがらみはTMProパッケージに入っている
using TMPro;

// サンプル用。敵キャラにAttachしてテスト。
public class EnemyController : MonoBehaviour
{
    private GameObject canvas;
    private GameObject damageText;

    void Start()
    {
        // 生成したインスタンスはCanvasを親オブジェクトにしないと見えない
        canvas = GameObject.Find("Canvas");

        // Resourcesフォルダに
        damageText = (GameObject)Resources.Load("DamageText", typeof(GameObject));
    }

    void Update() {
        // テスト用にキー入力時にダメージテキストを表示している
        if (Input.GetKeyDown(KeyCode.Space)) {
            // インスタンス生成
            GameObject damageTextInstance = Instantiate(damageText, new Vector3(0, 0, 0), Quaternion.identity);

            // Canvasを親にする
            damageTextInstance.transform.SetParent(canvas.transform, false);

            // 敵キャラクターの場所に配置
            damageTextInstance.transform.position = this.transform.position;

            // テキストを設定(100ポイントのダメージを頭上に表示
            damageTextInstance.GetComponent<TextMeshProUGUI>().text = "100";
        }
    }
}