ini 파일 유니티에서 읽고 쓰는 방법에 대해서 알려드립니다.
어플리케이션을 만들때 로컬에 있는 파일의 어떠한 정보를 읽고, 쓰고 할 필요가 있습니다.
자주 사용되는 파일 중에 config.ini가 있는데요
이러한 파일을 읽고 써야 할 일이 있을때 어떻게 해야할지 막막하다면(초보 기준) 아래 내용 확인해 보세요.
DLL 파일이란
ini 파일 읽고 쓰는데 갑자기 DLL 파일에 대한 언급이 나와서 당황할 수 있습니다.
DLL을 말한 것은 DLL 파일이 있어야 로컬에 있는 파일을 읽고 쓰는데 편리합니다.
DLL은 Dynamic Link Library 의 약자로 동적 연결을 위한 함수 모음이라고 하면 될까요?
동적 링크는 관련 기능 사용시에만 불려져서 사용되는 것으로 함수 위치 정보를 알고 있어야 호출할 수 있습니다.
정말 방대하고 다양한 DLL이 있지만, 로컬 파일 읽고 쓰기를 위해서 필요한 것은 바로 kernel32.dll 입니다.
kernel32.dll 이란
마이크로소프트 윈도우의 대표 라이브러리 파일로 메모리를 관리하거나, IO 즉 입출력 관련 및 프로세스, 스레드, 동기화 등등 다양한 기능과 연계되어 있습니다.
파일을 읽고 쓰고 하는 것은 IO 기능이기 때문에 kernel32.dll을 이용하게 됩니다.
그럼 이제 본격적으로 유니티에서 ini 파일 읽고 쓰기에 대해서 알아보겠습니다.
ini 파일 유니티에서 읽고 쓰기
1. 네임 스페이스 등록하기
유니티에서 DLL을 이용해서 읽고 쓰고하려면 3개의 네임 스페이스가 필요합니다.
InteriopServices, IO 그리고 Text인데요. 스크립트 최상단에 아래 내용 긁어서 붙여넣기 하면 됩니다.
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
2. kernel32.DLL을 임포트 하기
kernel32.dll을 임포트해야 ini 파일을 읽고 쓸 수 있는 함수를 사용할 수 있습니다.
임포트 방법은 아래와 같이 합니다.
[DllImport("kernel32", CharSet = CharSet.Unicode)]
위치는 스크립트에서 사용하는 클래스 내에 선언하듯이 하면 됩니다. 아래 이미지 참고하세요.
여기서 잠깐 등장하는 GetPrivateProfileString 은 파일 읽기를 할때 사용할 kernel32.dll의 함수입니다.
읽기의 경우 WritePrivateProfileString 함수인데요. 위의 이미지는 읽기만 하는 내용이라서 한개만 되어 있습니다.
읽기 쓰기를 모두 다 하려면 아래와 같이 각각 함수마다 dll 임포트를 해줘야 합니다. (아래 긁어서 붙여 넣기 하심 됩니다.)
[DllImport("kernel32", CharSet = CharSet.Unicode)]
static extern long WritePrivateProfileString(
string Section, string Key, string Value, string FilePath);
[DllImport("kernel32", CharSet = CharSet.Unicode)]
static extern int GetPrivateProfileString(
string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath);
3. ini 파일에서 값 읽어오기
자 이제 파일을 읽어야 하는데요.
파일 읽기 함수명은 원하는 것으로 하면 됩니다.
읽어온 내용을 string으로 뱉어 내도록 리턴 값이 string인 함수를 만들어서 해보았습니다.
중간에 Debug.Log는 제대로 받아오는지 확인차 넣은 것이니 필요 없으면 빼도 됩니다.
위에서 Path.Combine은 경로에서 뒤에 원하는 파일명까지 합치기위해서 한것이므로, filePath에 주소 전체를 string으로 저장해도 됩니다.
여기서 ini 파일 값을 읽어오려면 섹션이란 것과 키를 알아야 합니다.
위 이미지의 예시에는 base 섹션의 패스워드 키의 값을 가져오는 것입니다.
ini 파일에서 섹션과 키는 아래와 같이 표시됩니다.
base와 desktop 처럼 [ ] 괄호로 된 부분이 섹션이며, id=abc 처럼 앞에 있는 id, password 등이 키이고 그 뒤에가 값들입니다.
4. ini 파일에서 값 변경하기 (쓰기)
만약 위 config 파일이라고 가정했을 때, password를 바꾸고 싶다면 아래와 같이 쓰면 됩니다.
IniWriteValue("base", "password", "999999")
쉽죠?
dll 사용시 유니티 오류 몇가지 대처 방안
dll을 사용하려다 보면 컴파일 단계에서 에러가 나는 경우가 좀 있습니다.
이때 체크해볼만한 것은 아래와 같습니다.
1. 유니티가 현재 .net 4.x 로 설정이 되어 있는지 확인
player settings에서 other settings 항목에 보면 api compati 뭐시기 항목이 있는데요.
보통 여기가 2.x로 되어 있는 경우가 있는데요.
대부분의 dll 은 닷 넷 4.x 과 호환이 되므로 이쪽을 설정 변경해줍니다.
2. 모바일에서 외부 dll 위치 문제
모바일 앱에서 dll 사용시 유니티 에디터에서는 잘되는데 컴파일 에러가 나는 경우가 있습니다.
external dll에 대해서 비쥬얼 스튜디오에서 컴파일 하는 것이 아니라, 유니티가 컴파일을 하므로 dll 파일을 프로젝트에 포함시켜야 됩니다.
보통 assets 폴더 내 또는 플러그인 폴더에 넣어서 이러한 문제를 해결한다는 점도 알아두시기 바랍니다. (항상 모든 것이 그런것은 아니라는게 함정!! 구글과 친구가 되어보세요)
'프로그래밍' 카테고리의 다른 글
serverless 프레임워크와 장단점 (0) | 2021.03.08 |
---|---|
블록체인 프로그래밍 입문자 추천 언어와 툴 4가지 (0) | 2021.03.07 |
유니티 윈도우 빌드 메뉴 프레임 없애는 방법 (0) | 2021.03.05 |
자바 스크립트 대체 언어들과 효율성 (0) | 2021.03.04 |
머신러닝에 적합한 프로그래밍 언어 5가지 (0) | 2021.03.03 |