์ฌ์ค์ ์ ์ผ์ด ํ์ ์ฝ๋
https://github.com/PMK95/JAEMI/blob/main/Assets/TempClass.cs
text to Image๋ง๋ค์ด์ด ํจ ์จ๋ณด์ .
tmp space ์กฐ์ ํ๋๊ฑฐ ๋ชฐ๋ผ์ ๋น๊ณต๊ฐ ๋ฐ๊พธ๋ ๊ฑฐ๋ ๋ชป๋ฃ์ ใ
/// <summary>
/// ํด๋น ํ ์คํธ ๋ด์ฉ์ ์ด๋ฏธ์ง๋ก ์นํํด์ฃผ๋ ์ฝ๋์. ์นํ๋ ๋ด์ฉ์ ์๊น๋ง ์๋ณด์ด๊ฒ ๋ฐ๋
/// </summary>
/// <param name="tmp">ํ ์คํธ๋ฉ์ฌํ๋ก ๋ฃ์ผ์ผ</param>
/// <param name="targetText">๋ฐ๊ฟ string๋ฃ์ผ์ผ</param>
/// <param name="sprite">๋ฐ๊ฟ sprite ๋ฃ์ผ์ผ</param>
/// <param name="startIndex">๋ฐ๊พธ๊ธฐ ์์ํ string index๋ฃ์ผ์ผ</param>
/// <param name="imageSize">์ด๋ฏธ์ง ์ฌ์ด์ฆ ๋ฐ๊พธ๋ ค๋ฉด ๋ฃ์ผ์ผ</param>
/// <returns></returns>
public Image TextToImage(TextMeshProUGUI tmp, string targetText, Sprite sprite,int startIndex=0 ,Vector2? imageSize = null)
{
int charIndex = tmp.text.IndexOf(targetText, startIndex);
if (charIndex<0)
{
return null;
}
TMP_TextInfo textInfo = tmp.textInfo;
int charLastIndex = charIndex + targetText.Length - 1;
TMP_CharacterInfo charInfo = textInfo.characterInfo[charIndex];
TMP_CharacterInfo charLastInfo = textInfo.characterInfo[charLastIndex];
Vector2 textSize;
float textSizeX = charLastInfo.topRight.x - charInfo.bottomLeft.x;
float textSizeY = 0;
for (int i = 0; i < targetText.Length; i++)
{
TMP_CharacterInfo curCharInfo = textInfo.characterInfo[charIndex + i];
Vector2 charSize = curCharInfo.topRight - curCharInfo.bottomLeft;
if (textSizeY < charSize.y) { textSizeY = charSize.y; }
SetColorSingleWord(tmp, curCharInfo);
}
textSize = new Vector2(textSizeX, textSizeY);
Image image = new GameObject("TextToImage").AddComponent<Image>();
RectTransform imageRect = image.GetComponent<RectTransform>();
imageRect.SetParent(tmp.transform);
imageRect.sizeDelta = imageSize ?? textSize;
Vector2 textPos = (Vector2)charInfo.bottomLeft + (textSize) * 0.5f; ;
imageRect.anchoredPosition = textPos;
image.sprite = sprite;
return image;
}
ย ย /// <summary>
ย ย /// ๋ชจ๋ text ๋ฐ๊พธ๋ ค๋ฉด ๋ฃ์ผ์ผ
ย ย /// </summary>
ย ย /// <param name="tmp"></param>
ย ย /// <param name="targetText"></param>
ย ย /// <param name="sprite"></param>
ย ย /// <param name="imageSize"></param>
ย ย /// <returns></returns>
ย ย public List<Image> AllTextToImage(TextMeshProUGUI tmp, string targetText, Sprite sprite, Vector2? imageSize = null)
ย ย {
ย ย ย ย if (!tmp.text.Contains(targetText))
ย ย ย ย {
ย ย ย ย ย ย return null;
ย ย ย ย }
ย ย ย ย List<Image> images = new List<Image>();
ย ย ย ย int startIndex = 0;
ย ย ย ย while (true)
ย ย ย ย {
ย ย ย ย ย ย startIndex = tmp.text.IndexOf(targetText, startIndex+1);
ย ย ย ย ย ย if (startIndex < 0)
ย ย ย ย ย ย ย ย break;
ย ย ย ย ย ย var image = TextToImage(tmp, targetText, sprite, startIndex, imageSize);
ย ย ย ย ย ย images.Add(image);
ย ย ย ย }
ย ย ย ย return images;
ย ย }
๋๊ธ 0