프로젝트를 진행하는 와중 부족한 지식으로 인한 게임데이터 세이브 로드 코드의 불편함과 번역데이터 구조 및 씬 활용을 개선시키기 위해
씬전환의 경우 페이드인 페이드아웃을 모듈화하여 구현하였고, 번역데이터의 경우 Localization 패키지를 제대로 사용하여 수동 번역에서 자동번역으로 개선시키고있다. 또한 저장의 경우도 영구데이터와 삭제될 수 있는 플레이어 데이터를 한번에 모으는 것이 굉장히 복잡해져 저장코드 자체를 개선시키는 중에 있습니다.
아마 사용중인 툴들도 구조에 맞게 업데이트를 해야하기에 병행하여 작업할 예정입니다.
먼저 프로젝트들을 세팅하는 과정이나 툴들을 조정하는 과정에서 매번 프로젝트를 만들 때마다 각자의 방식으로 설정되다보니, 개인으로썬 문제가 없지만 회사나 팀으로 치자면 기본적인 체계도 없다는 느낌이 강하게 들었다. 이 부분을 해결하기 위해 패키지파일을 만들고 각 툴들을 정해진 시퀀스로 누르면 모든 프로젝트가 같은 세팅을 가질 수 있게하려고 한다.
먼저 어떤 세팅들을 할 것인가이다.
한 프로젝트에서 폴더 같은 경우 전부 패키지로 만들고 혹시라도 없는 폴더가 없을경우 생성시켜주는 툴을 제작을 한다. 그 다음 번역, 저장구조 등 어떤 게임이든 상관없이 사용하는 것들을 세팅해주는 툴을 만들어서 실행시키는 등의 모든 파일과 폴더를 합쳐 저장시켜주는 것이 좋을 것으로 보인다.
먼저 번역 시스템의 경우 이와 같은 구조를 가지게 만들고 있다.
1. 엑셀파일
2. 엑셀파일을 기준으로 만들어진 Key 상수 스크립트
3. Localization 패키지 기반 Setting .asset 및 스트링테이블 등
현재까지 작업을 한 것은 기존 만들었던 ExcelTo Json,CS 툴을 기반으로 Excel데이터를 불러오면 CS상수 스크립트를 만들며, Localization 패키지 세팅.asset을 만들고 LocalizationPackage의 Editor에 Setting파일을 바로 연동시켜주는 것까지 제작하였다.
CS상수 스크립트의 경우 3차 배열인 Excel 데이터의 0열 값들을 Key로 받아와 상수화 스트링 빌딩을 했지만 스트링 빌딩을 사용하지 않고 다른 방식으로 하는 것이 좋을 것으로 보인다. 그 이유는 스트링 빌딩의 경우 제작자의 스펠링 미스에 너무 취약하며 상시 모든 줄을 확인해줘야하기 때문이다.
다음으로 LocalizationPackage의 세팅 설정이다.
Setting 파일을 ScriptableObject.CreateInstance<LocalizationSettings>();로 인스턴싱한 후 AssetDatabase.CreateAsset(localizationSettings, assetOutputPath);로 저장을 하면 저장은 된다. 이것을 이제 UnityEditor.Localization.LocalizationEditorSettings.ActiveLocalizationSettings에 연결 시켜주면
툴을 실행했을 때 Setting 파일이 저장되며 해당 세팅이 PlayerSettings/Localization에 연결이 되며 어떤 언어들을 지원하여 세팅하고 파일을 생성할지를 물어보게 된다.
여기까지 왔다면 이제 해야할 일은 어떤 언어를 지원할지를 AddLocale등을 사용하면 될 것으로 보이지만 일단 Document를 정독하고 진행을 하려고 한다.
이 이후는 테스트를 해봤기에 가지고있는 0행 태그들을 Foreach로 순회하며 각 언어 Table을 연동시키면 해당 언어일때 어떤 Value가 나올지 자동으로 생성이 되었다, 즉 이 부분을 완성시키면 이제 번역시스템이 70% 제작이 완료된다는 소리이다.
번역데이터가 완료되는 대로 저장 시스템을 한번 더 손보면 회사에서 사용할 세팅체계의 첫 단추를 맞출 수 있게 된다.
작업을 하며 느낀 점은 게임 제작을 하고있지만 게임 프로그래머가 아닌 프로그래머란 큰 카테고리에서의 한걸음이 게임프로그래머로서 2~3걸음 같이 성장 곡선이 더 가팔라지는 것이 맞다는 것이다.
오늘 여러 오류들을 고치다 예전 업데이트가 설치 안되던 문제가 생각나 오늘 고쳐보기로 하였다.
먼저 오류의 내용은 파티션 오류였다. 처음에 파티션 오류의 내용을 모르고 스캔을 했을 때 하이퍼 바이저 커럽팅이 되있던게 체크가 되어 그 파일이 문제인 줄알고 여러가지 방법으로 제거하려했었다.
결국은 권한을 사용자로 부여하고 제거를 하면 되던 문제였다.
다시 돌아가 오류인 파티션 오류는 기존 업데이트에 쓰던 EFI 파티션이 100MB로 되어있어서 생긴 문제였다. 지금까지는 100MB에 아슬아슬하게 걸려 설치가 됬다면 이번에는 결국 넘어버리고 만 것이다. 설치 시기인 7월에 권장하던 EFI파티션이 100MB였던걸 생각하면 지금까지 파티션이 늘어나야한다는 걸 알려주거나 했어야한다고 생각한다.
파티션의 순서도 메인 파티션 앞쪽에 있었기에 여분 공간 분할하였어도 위치에 의해 합병이 되지않았다. 결국 급한 대로 서드파티 툴을 사용하여 파티션들의 위치를 바꿔서 해결하였다.
파티션을 옮긴다는 건 전부 포멧할 각오를 하고 해야하니 미리 백업을 만들어두도록 하자
결국 전부 포멧을 해버렸고, 다 없어진 김에 기존에 만들던 세팅 패키지들을 재작성하며 업데이트 시키기로 하였다.
먼저
1. FolderSettings
2. LocalizationSettings
등등
이 구조로 각 순서로 누르면 초기 세팅이 완료가 되게 끔 패키지를 만들고 있고,
폴더 세팅의 경우 완료가 되었다.
아래 영상은 제작한 폴더 세팅 툴을 작동시킨 영상입니다.
보시는 것과 같이 각 폴더들이 생성이 되는 것을 확인하실 수 있고, 모든 폴더들을 확인하며 존재하지 않는 폴더들만 생성하도록하여 상위폴더가 존재하더라도 하위폴더를 생성하도록 하였습니다.
Unity Localization 패키지를 사용하여 번역시스템을 만들어 보았다. CS파일 등 파일 생성과 번역이 잘 이루어지는 것을 확인하였다.
Unity만 쓴다는 가정하에는 패키지 사용도 괜찮다고 생각하지만, Unity가 아닌 다른 프로그램에서 사용하려면 Localization패키지가 아닌 Json파일을 생성 후 거기서 연동을 시켜야 하는 게 맞는 것 같다.
물론 지금은 Unity만 쓸 생각이기에 이 구조를 가져갈 것이지만 아마 다른 프로그램에서 쓸 생각이라면 기존에 쓰던 Json구조에서 연결방식을 지금 만들고 있는 프로세스로 만들면 가능하다.
역시 여러가지 방법으로 만들어봐야 각 상황에 맞게 대처가 가능하다고 생각이 된다.