본문 바로가기

진리는어디에

[Unity] 데이터 손실 없이 SerializedField 이름 바꾸기

유니티를 이용해 작업하다 보면 데이터를 저장하기 위해 SerializedField와 같은 어트리뷰트를 사용한다. 문제는 개발 도중 이 필드의 이름이 변경되어 기존 저장된 데이터들을 사용하지 못하게 되는 경우가 있다. 이런 경우 FormerlySerializedAs 어트리뷰트를 이용해 기존 버전과의 호환성을 유지해 줄 수 있다.

만일 아래와 같이 m_MyVariable이라는 멤버 변수를 사용하고 있는데 :

class MyClass : MonoBehaviour
{
    [SerializeField]
    private string m_MyVariable;
}

m_MyVariable의 이름이 다른 것으로, 예를 들자면 m_ABetterName와 같이 바뀐다면 기존에 m_MyVariable의 이름으로 저장된 데이터를 읽어 들이지 못하게 된다.

이럴 경우 아래와 같이 작성해주게 된다면 기존  m_MyVariable의 데이터를 m_ABetterName으로 치환해서 읽어 들일수 있다 :

class MyClass : MonoBehaviour
{
    [FormerlySerializedAs("m_MyVariable")]
    [SerializeField]
    private string m_ABetterName;
}

그리고 FormerlySerializedAs 는 여러번 중복해서 사용가능하다. 만일 이름이 여러 번 변경 된다고 하더라도 변경 히스토리에 따라 FormerlySerializedAs 어트리뷰트를 유지해 준다면 여전히 데이터 손실 없이 사용이 가능하다.

class MyClass : MonoBehaviour
{
    [FormerlySerializedAs("m_MyVariable")]
    [FormerlySerializedAs("m_ABetterName")]
    [SerializeField]
    private string m_EvenBetterName;
}

원문 : https://blogs.unity3d.com/2015/02/03/renaming-serialized-fields/

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!