본문 바로가기

전체 글

(18)
유니티에서 테이블 데이터 로드하기 #3 - Marshal System.Runtime.InterOpServices.Marshal을 사용하여 byte array로 변환하는 방법도 고려해볼 수 있다. 이 방법은 특히 관리되지 않는 형식, 즉 int, float 등으로만 구성된 클래스를 저장하고 읽을 때 빠른 속도를 보여준다. 데이터의 형식에 따라 상당히 달라질 수 있지만 json보다도 3~5배가량의 속도 향상을 기대해볼 수 있다. Marshal은 프로그램이 다른 프로그램에서 사용할 수 있도록 데이터를 전송하는 것을 의미하는데, Marshal을 하려면 직렬화를 하는 경우가 많다. 따라서 .NET에서는 Marshal.StructureToPtr과 Marshal.PtrToStructure를 이용해 간단히 클래스를 byte array로 직렬화하는 메소드를 제공한다. usin..
유니티에서 테이블 데이터 로드하기 #2 - CSV 두번째로 소개할 형식은 CSV이다. 과거에는 비교적 사용 빈도가 높았으나, 최근에는 게임 등 일부 분야를 빼고는 사용 빈도가 많이 줄어든 느낌이다. 장점으로는 사람이 읽고 비교하기가 가장 쉬운 형식이라는 점, 엑셀이나 구글 시트, 오픈오피스 등에서 CSV 익스포트를 모두 지원하기 때문에 간단한 경우 익스포터를 따로 만들 필요가 없다는 점 등이 있다. 단점으로는 CSV 파서는 유니티 내장 기능이 아니다보니 적당한 외부 라이브러리를 찾아와야 하는 점과, 속도가 비교적 느리다는 점 등이 있다. 또한 파서에 따라 빈 컬럼 (,,) 을 빈 문자열 ""로 읽거나 null로 읽는 등 동작이 조금씩 다른 점도 문제가 될 수 있다. C#용 CSV 파서는 여러가지가 있는데, 가장 널리 쓰이는 것은 CsvHelper(htt..
유니티에서 테이블 데이터 로드하기 #1 - JSON 게임 제작에는 아주 간단한 게임이 아닌 이상 데이터 테이블이 필수이다. 따라서 게임개발에는 필수적으로 테이블을 로드하는 코드가 들어가야 한다. 이 포스트들에서는 유니티에서 데이터 테이블을 다루는 여러가지 방법을 살펴볼 예정이다 가장 처음 소개할 내용은 JSON형식이다. 웹에서 널리 사용되어 비교적 친숙하며, 사람이 어느정도 눈으로 읽거나 고칠 수 있고, 유니티에 기본적으로 내장되어있다. using System; using System.Collections.Generic; using UnityEngine; [Serializable] public class Row { public int A; public float B; public string C; } [Serializable] public class Da..