유니티를 사용하다보면 각각에 에셋마다 하나씩 짝지어 생성되는 .meta파일에 대해 본 적이 있을 것이다. 이 .meta파일에 대해 알아보고, .meta파일을 직접 사용하는 방법까지 알아보자.
.meta 파일은 앞서 말했듯이 각각의 에셋과 짝을 이루는 파일로 짝지어진 에셋의 식별번호, 설정값, 상태등을 저장하는 파일이다.
유니티는 이러한 .meta파일을 이용하여 해당 에셋이 어떠한 에셋이고, 어떤 역할을 하는지를 구분하기에 만약 .meta파일이 임의로 삭제되거나, 잘못된 방법으로 수정된다면 에셋이 깨지거나 못쓰게 될 수 있다.
따라서 유니티를 사용하여 협업을 할시에 .meta파일의 관리가 중요하다고 볼 수 있다.
이제 .meta파일이 어떠한 방식으로 정보를 저장하고 있는지 알아보자.
fileFormatVersion: 2
guid: 8695c4ca10f6486e84347853e282a4b1
timeCreated: 1720589329
.meta 파일은 yaml 형식으로 저장되게 되며, 기본적으로 다음과 같은 세가지 정보를 담고 있다.
fileFormatVersion: 메타 파일의 형식을 나타내는 번호를 나타냄.
guid: 에셋의 식별자. 유니티의 에셋은 각각 고유한 식별번호(GUID)를 가지며, 이를 통해 프로젝트에서 에셋을 식별할 수 있음.
timeCreated: 에셋이 생성된 시간을 나타냄.
기본으로 들어가는 세가지 정보 외에도 .meta 파일은 각 에셋 타입에 따라 달라지는 Importer 정보를 포함할 수 있다. 해당 부분에는 말 그대로 에셋의 임포트 설정에 따른 세부정보가 저장되게 되는데, 우리가 커스텀하여 .meta 파일을 사용할 떄에도 Importer 정보를 사용하게 된다.
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
.meta 파일 속 Importer 정보를 살펴보면, 다양한 정보가 있지만 이 중 우리가 커스텀 하여 정보를 저장 및 로드해 사용할 수 있는 부분은 userData이다.
위에서 말했듯이 .meta 파일은 정보를 yaml 즉 텍스트 형식으로 저장한다. 따라서 우리는 정보를 unity에서 손쉽게 다룰 수 있는 json형식으로 정보를 저장 및 사용할 것 이다.
[Serializable]
class JsonWrapper
{
public List<string> data = new List<string>();
}
정보를 json 형식으로 감싸기 위해 해당 정보를 담아줄 Wrapper 클래스를 간단히 제작해준다.
class MetaDataLoader
{
private AssetImporter _importer;
public void Init(string assetPath)
{
_importer = AssetImporter.GetAtPath(assetPath);
}
public JsonWrapper Load()
{
var data = JsonUtility.FromJson<JsonWrapper>(_importer.userData);
if(data != null)
{
return data;
}
else
{
return null;
}
}
public void Save(JsonWrapper data)
{
var json = JsonUtility.ToJson(data);
_importer.userData = json;
}
}
유니티에서 제공해주는 함수인 AssetImporter.GetAtPath() 를 사용하여 지정한 위치의 에셋의 .meta 파일 속 Importer 정보를 객체로 가져올 수 있다.
위에서 말했듯 우리가 사용할 부분은 Importer정보의 userData 부분이기에 json 정보를 컨트롤 하여 저장 및 로드해주면 손 쉽게 .meta 파일 속 정보를 저장 및 사용할 수 있다.
이 친구 이제 포스팅이 없네...