Tales Saga Chronicle Blast 개발일지 26 - 코드 리팩토링 (1)
Mepkatatsu/TSCB_OnlyScript: Tales Saga Chronicle Blast의 Script만이 포함된 Repository (github.com)
GitHub - Mepkatatsu/TSCB_OnlyScript: Tales Saga Chronicle Blast의 Script만이 포함된 Repository
Tales Saga Chronicle Blast의 Script만이 포함된 Repository - GitHub - Mepkatatsu/TSCB_OnlyScript: Tales Saga Chronicle Blast의 Script만이 포함된 Repository
github.com
이전 글에서 언급했던 수정사항들을 일부 적용했다. 내용을 요약하면 아래와 같다.
[AudioManager]
변수명, 접근자 수정
코루틴 사용을 좀 더 깔끔하게 수정
내부에서 불필요하게 Getter Setter 사용하고 있던 부분 수정
인스펙터에서 BGM FadeOut 시간 정할 수 있도록 수정
볼륨이 항상 1초에 걸쳐서 FadeOut 되도록 수정
[BulletController -> MidoriBullet] (이름 변경)
미도리 총알에 붙는 스크립트라 이름 변경
[ButtonManager] (삭제됨)
GameManager, StoryManager, OptionWindow로 기능 분리
[DialogManager]
\n -> \r\n 수정
+csv로 관리할 예정임
[EnemyController -> ShootingGameEnemy] (이름 변경)
좀 더 직관적인 이름으로 변경
일부 변수 이름 수정
[FontLocalizer] (신규)
TMP_Text와 함께 사용함으로써 텍스트의 로컬라이징을 담당하는 스크립트
언어가 바뀔 때 텍스트의 위치를 조정할 수 있음
추후 테이블로 뺄 예정이나 일단 임시로 한국어/일본어 텍스트를 저장&변경 하고 있음.
+RequireComponent 추가해야 할 듯
[GameManager]
변수명 수정
옵션에 해당하는 기능 분리(OptionWindow로 이동)
Find 사용하던 것들 일부 삭제, 인스펙터에서 추가하도록 수정
버튼 OnClick 스크립트로 추가하도록 수정
로컬라이징 부분을 LocalizeManager와 FontLocalizer로 분리
스토리 선택 창을 SelectStageWindow로 분리함.
[JoystickController]
기존에 안 올렸었던 것 같은데 화면 터치로 조이스틱 조작할 수 있도록 해주는 스크립트
[LazerController -> LaserController] (이름 변경)
Lazer -> Laser 전체적인 오타 수정
[LocalizeManager] (신규)
로컬라이징을 담당하는 Manager로 언어가 변경되면 여기서 처리되며, 언어별 폰트를 관리함.
기본적으로는 UI가 켜질 때 로컬라이징이 처리되기 때문에 켜진 FontLocalizer를 저장
언어를 변경할 때 등록된 FontLocalizer들을 로컬라이징 해준다.
[MidoriPlaneController -> MidoriPlane]
불필요한 Controller를 이름에서 제외
[OptionWindow] (추가됨)
옵션 창을 관리함. 옵션에 해당하는 기능들은 전부 여기서 관리
Button의 OnClick이나 Slider의 OnValueChanged도 코드로 관리
이제 언어를 변경할 때 게임을 종료하지 않고, 실시간으로 변경할 수 있도록 수정하였음.
[SelectStageWindow]
스테이지를 선택하는 창을 분리하였음
세팅 방식이 깔끔해지긴 했으나 storyStartText 등은 여전히 개선이 필요함.
[SliderController] (삭제됨)
옵션에 사용되던 것이라 OptionWindow로 기능 분리
[Singleton]
게임 종료할 때 파괴된 것 생성하느라 오류가 떠서 그 부분 삭제함.
[StarColorController]
변수 이름 수정
float 수정된 것 끊겨서 다시 지정해줘야 함 -_-;;
[StoryManager]
사용하지 않던 변수 삭제
버튼 OnClick 스크립트로 추가하도록 수정
Find 부분 상당 부분 삭제. Episode와 Story의 용어에 혼동이 있어서 Story로 통일함.
얼마간 상당한 대공사를 했는데, 결과가 나쁘지 않은 것 같다.
가장 큰 변경은 로컬라이징으로, 시작할 때 한 번에 처리하지 않고 실시간으로 처리할 수 있도록 LocalizeManager와 FontLocalizer를 두어서 게임 종료 없이 언어 변경을 처리할 수 있도록 만든 점이다.
다만 아직 테이블로 처리하는 부분을 구현하지 않아 일부 언어별 텍스트를 인스펙터에 넣어 놓은 상태이고, 스토리 대사도 테이블 처리가 아직이라 좀 더티하게 처리되는 부분이 아쉽다고 할 수 있겠다. 이외에도 여전히 스크립트 내에 하드 코딩으로 박아놓은 내용들이 많은데, csv 테이블로 처리할 수 있도록 계획하고 있다.
그리고 GameManager에서 로컬라이징, 스토리 선택 창, 옵션 창 등 다양한 것들을 맡고 있었는데 이것들을 분리해주어서 훨씬 깔끔해졌다.
전체적인 코드도 버튼이나 Slider에 스크립트 내에서 이벤트를 추가해줌으로써 관리가 훨씬 편해졌고, Find를 상당 부분 줄여 가독성도 좋아졌고 성능도 꽤나 개선됐다. 몇몇 처리를 할 때 내부 클래스들을 추가해서 향후 뭔가 하나씩 추가될 때마다 하나씩 코드를 작성할 필요 없이 유연하게 대응 가능하도록 짠 부분도 있다.
여전히 개선해야 할 부분들이 많은데, 아래와 같다.
1. Dialog와 UI의 텍스트 등을 csv 테이블로 만들어서 처리하기
2. ObjectPooling을 맡아주는 스크립트 만들기
3. 스토리 연출을 일일이 코드로 작성하지 않고 툴로 만들어 json파일로 저장하고, 이걸 읽어서 처리할 수 있는 기능 만들기
4. Addressables를 활용하면 좋을 듯
5. ShootingGameManager의 기능들도 분리해야 할 듯
이외에도 아직 구현이 안 된 대화 로그? 그런 것들도 추가해보면 좋을 것 같다.
현재 Dialog를 구글 스프레드 시트에 작성하고 csv로 만들기는 했는데, csv를 읽어오는 처리를 어떻게 할지가 약간 고민이다. 그냥 어거지로 읽어와서 대충 누더기로 파싱하고 처리하는 건 충분히 가능하겠지만, 깔끔하게 처리하고 싶어서... 좀 더 고민이 필요할 것 같다.