動画で解説しましたので、詳しくは動画をご参照ください。
動画で使ったソースコードはこんな感じ。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using TMPro; //TextMeshPro
using Sirenix.OdinInspector; //Odin
using DG.Tweening; //DOTween
public class TestTextManager : SerializedMonoBehaviour
{
//クラス内クラス
class CustomSystemTMP
{
public TestTextManager testTextManager;
public GameObject obj_TMP;
public TextMeshProUGUI tmp;
/// <summary>
/// システムTMP生成
/// </summary>
public CustomSystemTMP Instantiate_CustomSystemTMP(GameObject _parentObj, Vector3 _position, string _text, UIColor _color = UIColor.White)
{
//カスタムシステムメッセージを生成
CustomSystemTMP csTmp = new CustomSystemTMP();
//メッセージを生成
csTmp.obj_TMP = Instantiate(testTextManager.prefab_SystemMessage, _parentObj.transform, false);
//親オブジェクトを設定
csTmp.obj_TMP.transform.SetParent(_parentObj.transform);
//位置を設定
csTmp.obj_TMP.transform.localPosition = _position;
//メッセージ全体のサイズを設定
RectTransform rt = csTmp.obj_TMP.GetComponent<RectTransform>();
rt.sizeDelta = Vector2.one;
//TMPの設定
csTmp.tmp = csTmp.obj_TMP.GetComponent<TextMeshProUGUI>();
csTmp.tmp.fontSize = 50; //文字サイズ
csTmp.tmp.alignment = TextAlignmentOptions.Center; //中央揃え(横)
csTmp.tmp.alignment = TextAlignmentOptions.Midline; //中央揃え(縦)
csTmp.tmp.lineSpacing = 100; //行間
//色を設定
if (_color == UIColor.White)
csTmp.tmp.color = testTextManager.dic_UIColor[UIColor.White];
else if (_color == UIColor.DeepRed)
csTmp.tmp.color = testTextManager.dic_UIColor[UIColor.DeepRed];
else if (_color == UIColor.Red)
csTmp.tmp.color = testTextManager.dic_UIColor[UIColor.Red];
//自動で改行しないようにする
csTmp.tmp.enableWordWrapping = false;
//枠をハミ出るようにする
csTmp.tmp.overflowMode = TextOverflowModes.Overflow;
//テキスト内容
csTmp.tmp.text = _text;
return csTmp;
}
}
//クラス内クラスをインスタンス化
CustomSystemTMP customSystemTMP = new CustomSystemTMP();
//色(カラーコード)
Dictionary<UIColor, Color> dic_UIColor = new Dictionary<UIColor, Color>{
{ UIColor.White, Color.white },
{ UIColor.DeepRed, new Color(180f / 255f, 32f / 255f, 42f / 255f) },
{ UIColor.Red, Color.red }
};
//色の名前
enum UIColor
{
White,
DeepRed,
Red
}
void Start()
{
//クラス内クラスに自分自身を認識させる
customSystemTMP.testTextManager = this;
}
[Button]
void InstantiateSystemMessage()
{
//メッセージを生成
CustomSystemTMP csTmp = customSystemTMP.Instantiate_CustomSystemTMP(Canvas, Vector2.zero, "これが最終テストメッセージです。\n良い感じですね!");
}
//親オブジェクト
[SerializeField] GameObject Canvas;
//システムメッセージのプレハブ
[SerializeField] GameObject prefab_SystemMessage;
}