a04424ad2c06782ab47e5a67ee91766dc289f1ecd6acc7c0bf11d3c05cd0d0219018477db2f5cac022a18a97a657


์‚ฌ์‹ค์ƒ ์ œ์‚ผ์ด ํ—Œ์ • ์ฝ”๋“œ



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;

ย  ย  }