2024. 1. 26. 20:55ㆍ내일배움캠프
1월 26일
지금 나는 Unity 학습과 함께 Unity 입문 팀 프로젝트를 준비하고있다.
우리 팀은 이번에 이런 똥피하기 게임을 만들기로 결정하고 작업을 진행중에 있다.
물론 우리 팀은 저대로 게임을 만들고 있지는 않고 나름 똥피하기 게임을 재해석 해서
전혀 다른 게임을 만들고 있다.
팀 프로젝트를 진행하면서 Dictionary를 사용하면 좋겠다 싶은 부분에서
Dictionary를 사용하려고 하는데 이게 왠일인가....
유니티에서 쓰는 Dictionary는 [Serializable]을 써도 public으로 열어놔도 인스펙터 창에 나오지 않는다.
그래서 Dictionary를 직렬화 하는 편법에 대해 알아보도록 하자
유니티 에셋 스토에서 해당 이미지의 에셋을 받아준다.
해당 딕셔너리를 만들어볼 C# Script를 하나 만들어주고 연습해보자
나는 Dictest라는 폴더를 하나 만들고 DicTest라는 스크립트를 만들었다.
Dictest 스크립트를 넣어줄 오브젝트를 하나 만들어주고 오브젝트안에 스크립트를 넣어준다.
이제 스크립트를 작성해주면 되는데
일반적으로 우리들이 딕셔너리를 만들때 위의 이미지처럼 만들면 되는데
인스펙터에 직렬화 시키기 위한 방법으로 바꿔보자
일단 해당 스크립트의 Dictest 밖으로 나가 직렬화를 위한 클래스를 하나 만들어준다.
나는 DicTest클래스 위에 stringInt라는 클래스를 하나 만들어주고
SerializableDictionary를 상속받아 주었다. 상속받는 <,> 안에는 내가 딕셔너리로 만들고 싶은
Key 값과 Value값을 넣어주면 된다.
또한 sringInt 클래스는 MonoBehaviour을 상속받고 있지 않기 때문에
에트리뷰트(Attribute)를 작성해준다.
에트리뷰트란?
에트리뷰트(Attribute) :
유니티를 사용하다 보면 에디터를 커스텀 하고 싶을때가 있는데
유니티에서 제공하는 Attribute를 이용하면 에디터를 커스텀 하는데 있어 편하게 진행할 수 있다.
우리는 커스텀한 클래스를 인스펙터 창에 표시되게 만들것이기 때문에
이렇게 작성해주면 된다.
이렇게 되면 우리는 stringInt라는 이름으로 딕셔너리를 만들수가 있는데
이렇게 작성하고 나면 우리는 딕셔너리를 직렬화 시킬수가 있다.
하지만 여기서 끝낼꺼라면 뭔가 아쉽지않은가...?
SerializableDictionary 에셋을 다운받았다면 Dictionary의 직렬화 뿐만 아니라
Dictionary를 좀 더 보기 쉽게, 좀 더 간편하게 사용할 수 있다.
SerializableDictionary 를 다운받았다면 해당 폴더 안의 Editor 안에 스크립트 파일이 하나가 있다
저 스크립트 파일을 열어서 보면
해당 스크립트 파일에는 두개의 클래스 파일이 있는데 예쁘게 접어주고 난 뒤에
클래스 위쪽에 에트리뷰트 하나를 추가해준다
CustomPropertyDrower이라는 녀석을 추가시켜주고
typeof() 부분에는 우리가 아까 직렬화 시켜준 딕셔너리 클래스의 이름을 적어주면된다
이렇게 작성했다면 저장을 해주고 유니티 에디터로 돌아가보면
딕셔너리 옆에 +버튼으로 인스펙터에서 딕셔너리 안에 Data의 추가가 가능해지고
당연히 Data옆에 -버튼을 통해 삭제가 가능해진다.
이런식으로 이름과 Clip파일로 AudioClip을 가지고 있는게 가능해진다
오늘은 유니티에서 Dictionary를 직렬화 하는 방법에 대해 알아보았다.
과정은 조금 복잡할 수 있지만 한번 배워두고 나면
굉장히 편하게 Dictionary를 사용할 수 있다는 장점이 있는것 같다.
1월 26일 TIL은 여기서 마치도록 하겠다.
'내일배움캠프' 카테고리의 다른 글
240130-TIL (0) | 2024.01.30 |
---|---|
240129-TIL (0) | 2024.01.29 |
240125-TIL (0) | 2024.01.25 |
240124-TIL (0) | 2024.01.24 |
240123-TIL (0) | 2024.01.23 |