다시 돌아온 유니티 시스템 스터디다!!
그동안 근황...?을 알아보자면... 그동안 결과를 기다리던 한 연합 동아리에서 합격 소식이 날아왔다!! 그 당시 친구들과 보드 게임장에 있었는데 순간 너무 크게 소리쳐서 경고까지 받았다 ㅋㅋ... 이번주도 이런 좋은 소식에 힘입어 파이팅 해보겠다!!
2주차에서는 유저 데이터, 데이터 테이블, 오디오 시스템에 대해 배워보았다. 유저 데이터부터 천천히 알아보겠다.
1. 유저 데이터
유저 데이터를 관리하기 위해서 PlayerPrefs를 사용하였다.
PlayerPrefs는 다음과 같다.
https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
위를 간략하게 요약하자면 다음과 같다.
PlayerPrefs는 게임 세션에서의 플레이어 설정 값을 저장하는 클래스로, string, float, int 값을 사용자 플랫폼의 저장소에 저장한다. 한 가지 알아두어야 하는 것은 이때 설정 값을 암호화하지 않고 저장하기 때문에 민감한 데이터는 이것을 통해 저장하지 않는 것이 좋다고 한다.
다만 이번 수업에서는 가장 중요한 제화인 골드와 잼을 그대로 저장하였다. 아마 수업의 용의성을 위해 사용한 것으로 보인다. 그러므로 Sound on/off 에 더 집중해 보겠다.
수업에서는 데이터 초기화, 저장, 로드를 수행하는 인터페이스를 작성하여 사용하였다. 나는 항상 어떤 정보를 저장할 때 각각 나눠서 저장하거나, Singleton 패턴을 사용하였는데, 이곳에서 인터페이스를 사용하는 것을 보고 많은 것을 느꼈다. 우선 Singleton 패턴의 단점을 극복할 수 있으면서, 해당 인터페이스를 통해 더 추상화된 기능으로 사용할 수 있다. 여러모로 장점이 많다고 생각이 들었다.
또한 데이터를 무조건 한 곳에서 처리하는 것이 아니라, 분류에 따라 따로따로 구성한 부분이 특히 마음에 들었다. 전반적으로 코드가 깔끔해 보이고, 나중에 유지보수에도 좋을 것 같다는 생각이 들었기 때문이다.
다음 수업에서는 유저 데이터 매니저를 만들었다!! 이곳에서는 모든 데이터 클래스를 한 번에 다루는 클래스였다. 전반적인 초기화, 저장, 로드를 진행할 때 유용할 것 같아서 마음에 들었다. 그리고 마지막으로 한번에 저장을 한 후 매니저에서 저장을 해준 부분이 좋았다.
하지만 강의 뒷부분에서 특정 데이터만 저장하고 싶을 때 Save가 안될 수도 있기 때문에 결국 모든 클래스에 Save 함수를 넣어주게 되었다. (생각하면 납득이 됨...)
Tip! PlayerPrefs는 Set 함수로 세팅을 하고, Save 함수로 실제 저장을 진행한다.
Tip! Edit에 ClearAllPlayerPrefs를 선택하면 모든 PlayerPrefs 가 초기화 된다.
2. 데이터 테이블 관리 시스템
다음은 배운 것이 아주 많은 데이터 테이블 관리 시스템에 대해 배웠다.
데이터 테이블 관리 시스템이 필요한 이유는 기획자가 어떤 데이터를 주었을 때, 그것과 이와 관련된 코드 수정 없이 바로 사용하기 위함이었다. 최근 프로젝트에서 이것과 관련된 코드를 팀장의 지시로 작성하게 되었다. 그때 당시에는 어떤 의도로 이 코드가 필요한지 몰랐기 때문에 많이 버벅거리고, 만드는 시간도 오래 걸렸는데, 이 수업을 듣고 왜 이 코드가 필요한지, 어떤 식으로 구조를 짜야하는지 이해가 되어 이 포스트를 쓴 이후 바로 수정을 들어갈 예정이다 ^^.. 팀장 미안...^^
우선 수업에서 제공해 준 CSV 파서에 대해 다뤄보겠다.
프로젝트에서는 CSV 파일을 프로젝트에 포함하면 바로 Json 파일로 바꿔주는 코드를 작성하였는데, 수업에서는 파일 경로가 들어오면 csv를 파싱 해주는 것으로 만들었다.
코드를 살펴보자(나만... 열어분들은 수업을 구매해서 보시거나 혹은 제 깃허브를 통해 봐주세요~ github 많관부 ^^)
특징적이거나 내가 처음 본 Regex에 대해 찾아보았다.
1) Regex
https://learn.microsoft.com/ko-kr/dotnet/api/system.text.regularexpressions.regex?view=net-7.0
- C#에서 정규 표현식을 표현한 것
>> 정규 표현식이란? 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어. 이 위키백과 참고
- C#에서 Regex를 사용하기
>> 이 링크 참고! 설명이 잘 되어 있다.
>> Regex.Split : 주어진 문자열을 주어진 정규식에 해당하는 문자로 나누는 것. 줄 넘김에 대해 split을 진행할 때 사용할 수 있다. (링크)
3. 오디오 시스템
마지막 수업으로는 오디오 시스템 제작이 들어갔다.
해당 시스템에서는 각 오디오 클립마다 오브젝트를 동적으로 생성해 주고, 등록된 AudioSource를 플레이하는 형식으로 진행하였다.
다만 걱정이 되었던 부분은 이런 식으로 동적으로 오브젝트를 많이 생성하게 되면 과연 좋은가? 였다.
물론 보이는 모습 자체는 상당히 깔끔해서 너무 마음에 들었다. 또한 이전에는 각각의 오브젝트 마다 모든 오디오를 따로 재생해 주었던 것에 비하여 이 구조에서는 오디오를 하나의 매니저에서 관리해 주기 때문에, 전체 음소거, 볼륨 세팅 등에 유리하겠다는 생각이 들었다. 사실 너무 멋진 OOP 구조라 많은 것을 배웠다.
특히 이전 프로젝트에서 각각의 음원을 다 옵저버 패턴으로 연결시켜 볼륨 조절을 시키느라 애먹었는데, 이렇게 하면, 한 번에 깔끔한 구조로 볼륨을 조절할 수 있다는 점에서 너무 마음에 들었다.
이번주도 호로록 맛난 코드를 먹어서 기분이 좋았다. 후후
요즘 수업을 들으면서 생각하는 것들은 내가 옛날에 얼마나 이상한 구조를 설계했는지이다. 괜히 반성이 되는 시간들이다.
하지만 그만큼 이런 좋은 스터디를 통해 많은 것을 배우고 있는 것 같아서 이 스터디를 듣기 참 잘했다는 생각이 들었다.
앞으로의 프로젝트에서도 여기에서 배우 ★어썸 ★ 한 구조들을 잘 활용해 보겠다.
다음 주에 또 만나겠다~~
'유니티 시스템 프로그래밍' 카테고리의 다른 글
유니티 시스템 스터디-5주차: 유저 인벤토리 (0) | 2024.11.26 |
---|---|
유니티 시스템 스터디-4주차: Lobby 씬 구조 및 디자인 패턴...그리고 유저 재화까 (2) | 2024.09.26 |
유니티 시스템 스터디-3주차: UI 화면 관리 시스템 (4) | 2024.09.19 |
유니티 시스템 스터디-1주차: 프로젝트 세팅하기, 주요 씬 설계, Title 시스템 제작 (6) | 2024.09.05 |