멍멍이네 블로그

비주얼 같은 경우 NuGet 솔루션 패키지 관리에서 다운 받아서 사용했습니다.

(유니티에서 보자면... 에셋 스토어 - 무료 패키지 같은 느낌... 이랄까요!)

https://hungry2s.tistory.com/204?category=526895

 

 

그런데 유니티에서는 어떻게 써야 할지 찾아보았습니다.

유니티는 직접 코딩하거나 라이브러리를 다운 받아서(혹은 만들거나) 사용하고자 했는데, 더 쉬운 자료가 있네요.

굳이 힘들게 할 필요 없으니 이용해볼까 합니다.

 

 

이 엑셀 리드의 메커니즘은.

1. 엑셀 파일을 실행 후 다른 이름으로 저장 - csv(쉼표로 분리)로 저장 시 csv 파일로 저장이 됩니다.

2. csv 파일은 엑셀 파일의 각 열을 쉼표로 분리하여 저장합니다.

3. 저장된 데이터를 split(쉼표)로 잘라서 사용. - 끝 -

 

엑셀의 1행에는 header(머리말)이 들어가도록 돼 있어서, 보기도 쉽네요.

(리더기는 2행 1열부터 읽음)

 

엑셀 리드 코딩은 간단합니다.

구글링 합시다.

 

출처 : https://github.com/tikonen/blog/tree/master/csvreader

(2014년 9월 13일 자 글)

 

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class CSVReader
{
	static string SPLIT_RE = @",(?=(?:[^""]*""[^""]*"")*(?![^""]*""))";
	static string LINE_SPLIT_RE = @"\r\n|\n\r|\n|\r";
	static char[] TRIM_CHARS = { '\"' };

	public static List<Dictionary<string, object>> Read(string file)
	{
		var list = new List<Dictionary<string, object>>();
		TextAsset data = Resources.Load (file) as TextAsset;

		var lines = Regex.Split (data.text, LINE_SPLIT_RE);

		if(lines.Length <= 1) return list;

		var header = Regex.Split(lines[0], SPLIT_RE);
		for(var i=1; i < lines.Length; i++) {

			var values = Regex.Split(lines[i], SPLIT_RE);
			if(values.Length == 0 ||values[0] == "") continue;

			var entry = new Dictionary<string, object>();
			for(var j=0; j < header.Length && j < values.Length; j++ ) {
				string value = values[j];
				value = value.TrimStart(TRIM_CHARS).TrimEnd(TRIM_CHARS).Replace("\\", "");
				object finalvalue = value;
				int n;
				float f;
				if(int.TryParse(value, out n)) {
					finalvalue = n;
				} else if (float.TryParse(value, out f)) {
					finalvalue = f;
				}
				entry[header[j]] = finalvalue;
			}
			list.Add (entry);
		}
		return list;
	}
}

 

그리고 필요한 곳에서

List<Dictionary<string, object>> 변수명 = CSVReader.Read("파일명(확장자x)");

선언 후 데이터를 사용하면 된다.

for(int i=0; i<data_dialog.Count; i++)
{
	Debug.Log("i : " + i + " [ " + 변수명[i]["damage"].ToString() + " ] " + " [ " + data_dialog[i]["hp"].ToString() + " ] ");
}

(ex) i : 1 [ 1 ]  [ 1 ] 

이런 식으로 출력된다.

 

다만, 필요에 따라 수정이 필요할 듯하다.

* 파일 경로 *

- 기본적으로 Resources.Load를 사용하기 때문에 Resources 폴더에 있는 csv를 사용하는 장점이자 단점이 있다.

서버나 다른 경로에서 읽어오기 위해서 stream으로 변경해서 사용하는 게 더 활용도가 높을 듯.