์ ์ฌ์ง์ ๋ด์ฉ์ ์๊ธฐํ์๋ฉด
public class TextAnimScript : MonoBehaviour
{
ย ย [SerializeField]
ย ย private Text txtMessage;
ย ย [SerializeField]
ย ย private AudioSource typeSFX1;
ย ย void Start()
ย ย {
ย ย ย ย //"์ค์ฌ์ด ๊ธธ์ ๋ง์์ฐ๋ค!" ์ถ๋ ฅ. "๊ธธ์" ๊น์ง ์ถ๋ ฅํ๊ณ 1.5์ด ๊ธฐ๋ค๋ฆฐ ๋ค, ๊ทธ ๋ท๋ถ๋ถ ์ถ๋ ฅ.
ย ย ย ย //StartCoroutine(PrintMessageByCourtine(" * ์ค์ฌ์ด ๊ธธ์<1.5> ๋ง์์ฐ๋ค!"));
ย ย ย ย StartCoroutine(PrintMessageByCourtine(" * ์ค์ฌ์ด ๊ธธ์ ๋ง์์ฐ๋ค!"));
ย ย }
ย ย IEnumerator PrintMessageByCourtine(string message)
ย ย {
ย ย ย ย int start =-1;//๋๋ ์ด ๋ช ๋ น์ด์ธ "<"์ ์์น.
ย ย ย ย int end = 0;//๋๋ ์ด ๋ช ๋ น์ด์ธ ">"์ ์์น.
ย ย ย ย bool bStart = false;
ย ย ย ย string time = string.Empty;
ย ย ย ย for (int i = 0; i < message.Length; i++)
ย ย ย ย {
ย ย ย ย ย ย if (message[i] == '>')
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย end = i + 1;
ย ย ย ย ย ย ย ย break;
ย ย ย ย ย ย }
ย ย ย ย ย ย if (bStart)
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย time += message[i];
ย ย ย ย ย ย }
ย ย ย ย ย ย if(message[i] == '<')
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย start = i;
ย ย ย ย ย ย ย ย bStart = true;
ย ย ย ย ย ย }
ย ย ย ย }
ย ย ย ย string copyMessage = message.Remove(start, end - start); //48 ๋ฒ์งธ ์ค
ย ย ย ย txtMessage.text = string.Empty;
ย ย ย ย for (int i = 0;i < copyMessage.Length;i++)
ย ย ย ย {
ย ย ย ย ย ย if (i == start)
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย yield return new WaitForSeconds(float.Parse(time));
ย ย ย ย ย ย }
ย ย ย ย ย ย txtMessage.text += copyMessage[i];
ย ย ย ย ย ย yield return new WaitForSeconds(0.05f);
ย ย ย ย }
ย ย }
}
์ ๋๋ค.
์ ์ฝ๋์ ์๋ฌด๋ Text์ ์์ ๊ฐ์ ๋ด์ฉ์ ์ธ๋ํ ์ผ ๋ฐฉ์์ผ๋ก ํ๋์ฉ ์ถ๋ ฅ๋๊ฒ ํ๋ ๊ฒ๋๋ค. ๊ทธ๋ฆฌ๊ณ , <๋ก ์์ํ๊ณ >๋ก ๋๋๋ ๊ธ์ด ์์ผ๋ฉด ๊ทธ ์์ ์๋ ์ซ์๋งํผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๊ทธ ๋ท๋ถ๋ถ์ด ์ถ๋ ฅ๋๋ ์ฝ๋์ด๊ตฌ์.
๊ทธ๋ฐ๋ฐ, ์ด์ํ๊ฒ 48๋ฒ์งธ ์ค์ด ์๋ฌ๊ฐ ๋จ๋ค์... ์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น์?
์ ๋ ํด๊ฒฐ์ ํ๊ณ ์ถ์ง๋ง, ์๋ ์ฝ๋ฉ์ ์ ์ํ๊ณ ๋ํธ์๋ง ๋น ์ง๋ค๋ณด๋, ๊ฒฐ๊ตญ ์ด๋ ๊ฒ๊น์ง ๋๋ค์...
์ ๋ง ์ฃ์กํฉ๋๋คT.T
ArgumentOutOfRangeException: Cannot be negative.
Parameter name: startIndex
System.String.Remove (Int32 startIndex, Int32 count) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/String.cs:1743)
TextAnimScript+<PrintMessageByCourtine>c__Iterator0.MoveNext () (at Assets/Script/TextAnimScript.cs:48)
UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
TextAnimScript:Start() (at Assets/Script/TextAnimScript.cs:18)
์๋ฌ ๋ฉ์ธ์ง ๊ตฌ๊ธ ๋ฒ์ญ ๋๋ ค๋ผ. ์์ธ๋ก ํจ๊ณผ ์ข๋ค
์ฒซ์งธ์ค ์๋ฌ ๋ฉ์ธ์ง ๋์ฐ๊ธฐ ํด์ ๊ตฌ๊ธ ๋ฒ์ญ ๋๋ฆฌ๋ฉด Argument Out Of Range Exception: Cannot be negative. => ๋ฒ์ ์์ธ ์ธ์ : ์์ ์ผ ์ ์์ต๋๋ค.
๋์งธ์ค ์๋ฌ ๋ฉ์ธ์ง ๋ณด๋ฉด startIndex๋ฌธ์ ๋ผ๊ณ ๋์ค์ง?
string copyMessage = message.Remove(start, end - start); //48 ๋ฒ์งธ ์ค. ์ฌ๊ธฐ์ start ์์๋ก ๋ฃ์๋ค๊ณ ์๋ฌ๋๋ค๋ ์๋ฆฌ๋ค
์๊ฐ๋ฝ ์ฌ๋ฆฌ์๋ฉด message.Remove(a, b)๊ฐ ์ ํํ๋ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ a~b ๊ตฌ๊ฐ์ ์ง์ด๋ค๋ผ๊ณ ์๊ฐํ๋ฉด <>๊ฐ ์๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ๋ฉด start๊ฐ -1์ธ ์ํ๋ก Remove(-1, 1)์ด ๋์ด์ ์ค๋ฅ๋จ๋ ๊ฒ ๊ฐ์ ๋ฌธ์์ด(๋ฐฐ์ด)์ -1๊ตฌ๊ฐ์ ์๊ฑฐ๋
40๋ถ ๋ฐ์ ์์ง๋ฌ๋๋ฐ ๋ต๋ณ์ด ๋ง์ด ๋ฌ๋ ธ๋ค์! ๋ค๋ค ๊ฐ์ฌํฉ๋๋คT.T
๋๋ผ๋ฉด ์๋ถ๋ถ์์ <time>์ ์ฒ๋ฆฌ๋ฅผ ํ์ง์์ ๊ฒ ๊ฐ์ "๋๋ <1.5> ๊ณต๋ถ๋ฅผ <1.0> ํ๋ค." ์ด๋ฐ์์ผ๋ก 2๊ฐ ์ด์์ ๋ชป์ฌ์ฉํ์์
< ๋ง๋ ๋๊น์ง๋ ๊ทธ๋ฅ ์ถ๋ ฅํ๋ค๊ฐ < ๋ง๋๋ฉด > ์ ๊น์ง์ ์ซ์๋ฅผ ์ฝ์ด์ ๊ทธ๋งํผ ๋ฉ์ท๋ค๊ฐ ๋ค์ ๋๋จธ์ง ์ถ๋ ฅํ๋ ์์ผ๋ก ๋ง๋ค ๊ฒ๊ฐ์