์คํฌ๋ฆฝํธ ์์๋ ์๋ฌ๋ฌธ๊ตฌ๊ฐ ์๋๋ฐ
IndexOutOfRangeException: Array index is out of range.
DataManager.Start () (at Assets/DataManager.cs:25)
์ด๊ฒ ์ฝ์์ ๊ณ์ ๋จ๋ค์.ย ์ด์ฉ๋ผ๋๊ฑด์ง ๋์ ํ ๋ชจ๋ฅด๊ฒ ์๋๋ค...ํํ
์ง๊ธ ๋ง๋๋ ค๊ณ ํ๋๊ฑด ์์ดํ ์ ๋ ๋ฒจ๊ณผ ๊ฐ๊ฒฉ, ํ๋์ฝ์ธ์ ๋ฃ์ย ๋์ ๋๋ฆฌ์ธ๋ฐ
string ์์ดํ ์ด๋ฆย / int LVย / int COSTย / int COIN
์ด ๋ค ๊ฐ์ย
์์ ๋์ ๋๋ฆฌย
(key= string"์์ดํ ์ด๋ฆ", value=ย ํ์ย ๋์ ๋๋ฆฌ(key= int LV, value= int COST, int COIN>
์ด๋ ๊ฒ ์ ์ฅํด์ PRINT๊ฐ์ผ๋ก ๋ถ๋ฌ์ค๋ ์คํฌ๋ฆฝํธ์ ๋๋ค.
๋ฐ์ดํฐ๋ ํ ์คํธ์์ ์ผ๋ก ์ ๋ฃ์ด์คฌ๊ตฌ์.
์๋๋
DataManager ์คํฌ๋ฆฝํธ ์ ๋ฌธ์ ๋๋ค.ใ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataManager : MonoBehaviour
{
ย ย Dictionary> dataDic =
ย ย ย ย new Dictionary>();
ย ย public TextAsset textAsset;
ย ย void Start()
ย ย {
ย ย ย ย string[] lines = textAsset.text.Split('\n');
ย ย ย ย foreach (string line in lines)
ย ย ย ย {
ย ย ย ย ย ย string[] words = line.Split('\t');
ย ย ย ย ย ย if (!dataDic.ContainsKey(words[0]))
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย dataDic.Add(words[0], new Dictionary());
ย ย ย ย ย ย ย ย //์์ดํ ์ด๋ฆ ํค๋ฅผ ๋ง๋ค์ด์ค๊ฑฐ์
ย ย ย ย ย ย }
ย ย ย ย ย ย dataDic[words[0]].ย ย ------>์๊ฒ ์ฝ์์ฐฝ ์๋ฌ์ย ๋จ๋ 25๋ฒ์งธ์ค. ๊ทธ๋ฌ๋ ์คํฌ๋ฆฝํธ ๋ด์์๋ ์๋ฌํ์๊ฐ ์ ๋จ
ย ย ย ย ย ย Add(int.Parse(words[1]), new StatData(int.Parse(words[2]), int.Parse(words[3])));
ย ย ย ย ย ย print("์์ดํ H๋ย ๋ช์ฝ์ธ์์ป๋?" + dataDic["์์ดํ H"][8].coin);
ย ย ย ย ย ย print("์์ดํ A๋ย ์ผ๋ง?:" + dataDic["์์ดํ A"][1].cost);
ย ย ย ย }
ย ย }
ย ย public class StatData
ย ย {
ย ย ย ย public int cost, coin;
ย ย ย ย public StatData(int _cost, int _coin)
ย ย ย ย {
ย ย ย ย ย ย cost = _cost;
ย ย ย ย ย ย coin = _coin;
ย ย ย ย }
ย ย }
}
ย ย ย
words๊ฐ ๋น๊ฑฐ์๋?
word[0] ์ ๊ฐ์ด ์๋ค๋๋ฏ
if (!dataDic.ContainsKey(words[0])) { dataDic.Add(words[0], new Dictionary<int>()); } dataDic[words[0]].Add(int.Parse(words[1]), new StatData(int.Parse(words[2]), int.Parse(words[3]))); ๋ถ๋ช ์ผ์ผ ๋ฃ์ด์ค์ ๋น์์๋ฆฌ๊ฐ ์์ํ ๋ฐ ๊ด๊ด
์ด์จ๋ ๋ต๋ณ ๊ฐ์ฌ์... ใ ใ ใ
๋ถ๋ช ์ธ์ง ์๋์ง ํ์ธํ๋ ค๋ฉด ์๋ฆฌ๋จผํธ ๋ช ๊ฐ ๋ค์ด์๋ ํ์ธํด๋ณด์ . ์๋ฌ ๋ก๊ทธ๋ ์กด๋ ๋ปํ ์๋ฌ๋ก๊ทธ์ธ๋ฐ ( ์ฌ์ง์ด 0 ๋ฒ ์๋ฆฌ๋จผํธ ์ ๊ทผํ๋๋ฐ ์ ๋ฌ๋ฉด ) ๋ถ๋ช ํ ์๋ค์ด๊ฐ๊ฑฐ์
ํ์ธํด๋ณด๋ lines์ ์๋ฌด ๊ฐ์ด ๋ค์ด์์ง ์๋ค์. ๋ถ๋ช ํ ํ ์คํธ์์ ์ ํ ์คํธ๋ฅผ ์คํ๋ฆฟ์ผ๋ก ๋๋๊ฑธ ๋ฃ์ด์คฌ๊ฑด๋ง ใ
public ๋ฃ๊ณ ์ธ์คํํฐ์์ ํ์ธํด๋ณด์
ํ์ธํด๋ณด๋๊น lines์ ์ฌ์ด์ฆ๊ฐ 0์ด๋ค์ ใ ๋ถ๋ช ํ ์ฝ๋์์์ ํ ์คํธ์์ ์ ์ํฐ๋จ์๋ก ์๋ผ์ ๋ฃ์ด์คฌ๋๋ฐ
์ํฐ๋จ์๋ผ๋ฉด \r๋ ํจ ํด๋ด
์กด๋ ๋ฌด์ํ์ง๋ง ํ์คํ๋ฐฉ๋ฒ ( ์ค๋ง๋ค ๋ก๊ทธ ์ฐ์ด๋ด )
์์ธ์ ํ์ ํ์ง๋ง ํด๊ฒฐ์ฑ ์ ๋ชจ๋ฅด๊ฒ ๋ค์ ใ ใ
์ค๋ฅ๋ ๋ฐฐ์ด ๊ธธ์ด๊ฐ ์ธ๋ฑ์ค๋ณด๋ค ์งง์ผ๋ฉด ๋ฑ๋ ์ค๋ฅ์ธ๋ฐ ํ์๊ฐ์๊ฑฐ์? ๋ด๊ฐ๋ณด๊ธฐ์ ํ์ํํ ๋ฐ์ดํฐ๊ฐ ์๋์ด๊ฐ๋ฏ
์ Parse์ฌ์ฉํ๊ธดํ์ต๋๋ค! words[0] = stringํ์์(์์ดํ ๋ช ) dataDic[words[0]].Add(int.Parse(words[1]), new StatData(int.Parse(words[2]), int.Parse(words[3]))); ์ฐ์ lines ๊ธธ์ด๊ฐ ์ธ์คํํฐ์ 0๋ก ๋์์ ์ฌ๊ธฐ์ ๋ฌด์ธ๊ฐ ์๋ชป๋๊ฒ๊ฐ์๋ฐ ํด๊ฒฐ์ฑ ์ ๋ชฐ๋ผ์ ใ ใ
๋๊ฐ ํท๊ฐ๋ฆด์ ์์ด์ ๊ทธ๋ฐ๋ฐ ๋ด๊ฐ๋งํ ํ์๋ ๊ตฌ๋ฌธํ๋ ์ผ๋ก int.Parse๋ ํ๋ฆฌ์ง ์๋๋ฐ ์ข๋ ํฐ ๊ฐ๋ ์
๋ฐฐ์ด ๊ฐ์ฒด๋ ์์ฑ๋ผ์๋๋ฐ ๋ฐฐ์ด ๊ธธ์ด๊ฐ 0์ธ๊ฑฐ์
๋ง์์ ์ธ์คํํฐ๋ก ํ์ธํ๋๋ ๋ฑ ๊ทธ๋ ๊ฒ ๋์ด์์ด์
๋ฐฐ์ด์ฌ์ด์ฆ(length)๋ ์ ๋ํฐ ์ธ์คํํฐ ์์์๋ ์ง์ ํด์ค ํ์๊ฐ ์๋๋ฐ ๊ทธ๊ฑธ ์ํด์ฃผ์ ๊ฒ ์๋๊ฐ ์์ฌ์ค๋ฝ์ต๋๋ค. ๊ทธ๋ด๋ ค๋ฉด ์คํํธํจ์๊ฐ ์๋ ๊ณณ์์ ์ง์์ ๊ทผ์(public)๋ก ๋ฐฐ์ด์ ์ ์ธํด์ค ํ์๊ฐ ์์ต๋๋ค.
lines ํผ๋ธ๋ฆญ ์ ์ธ ํ ์ธ์คํํฐ๋ก size 0 ๋์ด์๋๊ฑฐ 10์ผ๋ก ๋๋ฆฌ๋๊น ์ ๊ฐ ์ํ๋ ๊ฐ์ด ์๋๋ผ ๋น์นธ์ด ์๋ฉ ์๊ธฐ๋๋ผ๊ตฌ์ ๊ฑฐ๊ธฐ์ ๊ฐ์ ์จ๋ ์ถ๋ ฅ๋์ง๋ ์๊ตฌ์ใ ใ ใ ๋ต๋ณ์ ๋ง๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ทธ ๋น์นธ์ ์ ์๋์ด ์ํ๋ ๊ฐ์ ์ฐ์๊ฑฐ๋ ํน์ ์ ๋ฐ์ดํธํจ์๋ ์คํํธํจ์์์์ ์ํ๋ ๊ฐ์ ๋ฃ์ผ์๋ฉด ๋ฉ๋๋ค. Public ์ ์ธ์ดํ ์ธ์คํํฐ์์์ ์ฌ์ด์ฆ ์กฐ์ ํด์ฃผ์๊ณ , ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๊ทธ ์์ ๋ญ ๋ฃ์ง์์ ์ด์ ๋น์ฐํ ๋น์นธ์ ๋๋ค. ์ฐ์ ๋ฐฐ์ด์ ์ ์ธํ ์ดํ ๊ฐ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ผ๊ณ ๋์ด์๋๊ฒ ์คํํธํจ์๋ก ๋์ด์์ผ๋ ๊ฒ์์ ์คํํ์ ํ ์ธ์คํํฐ๋ฅผ ํ์ธํด๋ณด์ธ์.
ํซ ์ด ๋ต๊ธ์ ์ด์ ์ผ ๋ดค๋ค์!!! ๋ต๋ณ ์ ๋ง์ ๋ง ๊ฐ์ฌ๋๋ ค์!! ์ธ๋จธ๋์ด ์ง์ด์ฃผ์ ๋ฌธ์ ๊ทธ๋๋ก์์ต๋๋ค
Start๋ฉ์๋์ ์ต์๋จ์ค์์๋ string[] lines = textAsset.text.Split('n');์์ ๋๋ฝ๋์์๋ ์์ผ๋๊น ์ ๊ฑธ ํ์ธํด๋ฐ
string[] lines = textAsset.text.Split('\n'); ์ผ๋จ ์ฌ๊ธฐ ์๋ฌ๋ก๊ทธ๋ ์๋จ๋๋ฐ ์ฌ๊ธฐ์ ๋ฌด์ธ๊ฐ ๋ ๋ง์ ธ์ค์ผํ๋๊ฑธ๊น์? ๋ต๋ณ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค ใ
์ง๊ธ ์ํฐ๋ก ๊ตฌ๋ถํ๋๊ฑฐ๋ผ ํ์ผ๋๊น \n๋์ \r๋ ์จ๋ด
์ด๊ฑด ๊ฑ ๋ง๋ก ํด๊ฒฐํ๊ธด ์ด๋ ค์ธ๊ฑฐ๊ฐ๊ณ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์ฌ๋ ค์ฃผ์ง์์๋ ?
์ ๋ง์ ๋ง ๊ฐ์ฌํฉ๋๋ค ใ ใ ใ ใ ใ ใ ์ด๊ฒ์ ๊ฒ ๋คํด๋ณด๋ค๊ฐ ์ ๋ต์ด ๋์๋๋ฐ ๊ทธ๊ฑด ํ ์คํธํ์ผ์ด ํ๊ธ์ด์ด์ ๊ทธ๋ฌ๋๊ฑฐ์์ต๋๋ค. ๊ทธ๋์ ํ ์คํธํ์ผ์ ๋ด์ฉ์ด ๋๋ฝ๋์๋๊ฑฐ๊ตฌ์ ใ ใ ๋ต๋ณ์ ๋ง๊ฐ์ฌํฉ๋๋ค!!!!!!!!!!!!!!!!!
์ ๋คํด๊ฒฐ๋๊ณ ๋๋๊น ์ด๋ฐ๊ฒฝ์ฐ๋ ์์๋ค
์ฌ์ฉํ๋ ์ปดํจํฐ๊ฐ ๋งฅ์? ์๋์ฐ์? ๊ทธ๊ฒ๋ง ์ข ์๋ ค์ฃผ์ค ์ ์๋์
์๋์ฐ์ ๋๋ค! ๋ฉ๋ชจ์ฅ์์ utp-8์ธ๊ฐ๋ก ์ธ์ฝ๋ฉํด์ ์ ์ฅํด์ผ๋ง ์ ๋ํฐ์์ ์ฝํ๋๋ผ๊ตฌ์
์ํ ๊ฐ์ฌํฉ๋๋ค ์ ๋ ๋ฐฐ์๊ฐ๋ค์
textAsset.text ๋ด์ฉ์ด ๋ญ๋ฐ. ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ์ง์ง๋๋ผ.
ํ๊ธ์ด์์ด์ ์๋๋ ๊ฑฐ์๋ค์ ใ ๋ค์๋ถํฐ๋ ์ง๋ฌธํ ๋ ๋ค ๊ฐ์ด ์ฌ๋ ค์ผ๊ฒ ์ต๋๋ค ์ฃ์กํด์
์ ๋์ฝ๋ ํฌํจ๋ ๊ฑฐ๋ฉด ๊ทธ๋ด ์ ์์ง.
์์งํ ๋๋ ์ ๋์ฝ๋ ๋ฌธ์ ๋ก ์ ์๋์ง ํ ๋ ๊ฐ๋ ์์.