ソースコード
using System.Linq; using TMPro; public static class TMP_TextExtensionMethods { public static float GetLocalEdgeLeft( this TMP_Text self ) { return self.transform.localPosition.x + self.textInfo.characterInfo.Min( x => x.bottomLeft.x ); } public static float GetLocalEdgeBottom( this TMP_Text self ) { return self.transform.localPosition.y + self.textInfo.characterInfo.Min( x => x.bottomLeft.y ); } public static float GetLocalEdgeRight( this TMP_Text self ) { return self.transform.localPosition.x + self.textInfo.characterInfo.Max( x => x.topRight.x ); } public static float GetLocalEdgeTop( this TMP_Text self ) { return self.transform.localPosition.y + self.textInfo.characterInfo.Max( x => x.topRight.y ); } public static float GetEdgeLeft( this TMP_Text self ) { return self.transform.TransformPoint( self.textInfo.characterInfo.Min( x => x.bottomLeft.x ), 0, 0 ).x; } public static float GetEdgeBottom( this TMP_Text self ) { return self.transform.TransformPoint( 0, self.textInfo.characterInfo.Min( x => x.bottomLeft.y ), 0 ).y; } public static float GetEdgeRight( this TMP_Text self ) { return self.transform.TransformPoint( self.textInfo.characterInfo.Max( x => x.topRight.x ), 0, 0 ).x; } public static float GetEdgeTop( this TMP_Text self ) { return self.transform.TransformPoint( 0, self.textInfo.characterInfo.Max( x => x.topRight.y ), 0 ).y; } }
使用例
using TMPro; using UnityEngine; public class Example : MonoBehaviour { public TMP_Text m_tmpText; private void Update() { var x = m_tmpText.GetEdgeLeft(); var y = m_tmpText.GetEdgeBottom(); transform.position = new( x, y ); } }