🐥

マウス直下にあるTextMeshProのTextの文字を取得する

2022/09/21に公開

コード

サンプルコードは以下。
これで、マウスカーソル以下にある文字がDebug.logで表示されます。

using TMPro;
using UnityEngine;

public class MouseOnTextObserver : MonoBehaviour
{
    //TextMeshProのTextコンポーネントをここに選択
    [SerializeField] private TextMeshProUGUI displayUIText;
    private string colorTagStart = "<color=red>";
    private string colorTagEnd = "</color>";

    private void Update()
    {
        //文字列のindexが取れる
        var index = TMP_TextUtilities.FindIntersectingCharacter(displayUIText, Input.mousePosition, null, true);

        //マウス以下のindexが取れないと-1になるので、-1以外のみ
        if (index != -1)
        {
            //カーソル直下にある文字
            var text = this.displayUIText.text;
            Debug.Log(index + " : " + text[index]);
            //カラータグを消す("<color=red>"てやつと"</color>")
            text = text.Replace(colorTagStart, "");
            text = text.Replace(colorTagEnd, "");
            //カラータグを付与
            var editedText = text.Insert(index + 1, colorTagEnd);
            editedText = editedText.Insert(index, colorTagStart);
            //uiに表示
            displayUIText.text = editedText;
        }
    }
}

参考

https://docs.unity3d.com/Packages/com.unity.textmeshpro@1.3/api/TMPro.TMP_TextUtilities.html

https://forum.unity.com/threads/ui-textmeshpro-how-to-get-the-caracter-under-the-mouse.1204447/

Discussion