유니티 엔진 - 게임 프로젝트/타워 디펜스 게임

번외) 리팩토링 (1) - 이벤트 버스 패턴 + 클래스 역할 분리

monstro 2026. 8. 23. 17:30
728x90
반응형

- 개요

이전의 프로젝트 구조에서는 무분별한 싱글톤 오브젝트의 사용과 클래스의 역할이 과도하게 집중되었다

따라서 구조를 수정하여 싱글톤이 아닌, 이벤트 버스 패턴을 사용하여 클래스들간의 작업을 연결하고

클래스들의 역할을 분리하여 하나의 클래스에 역할이 과하게 집중되는 것을 방지한다

 

- 스크립트 작업

1) GameEvent 클래스

 

이벤트 버스 패턴으로 사용할 GameEvents 클래스를 생성한다

멤버변수를 위와 같이 구성한다

  • Player Status 이벤트 : 플레이어와 관련된 이벤트
  • Gameplay Status 이벤트 : 과 관련된 이벤트
  • Wave progress 이벤트 : 웨이브와 관련된 이벤트
  • 이후 Raise 계열 함수들을 사용하여 이벤트에 연결된 콜백함수를 호출

 

2) GameServices 클래스

멤버변수
멤버함수

 

서비스 로케이터 패턴으로 사용할 GameServies 클래스를 생성한다

무분별하게 남발하는 싱글톤을 제거하고 다수의 매니저 클래스 로케이터에 등록하여 사용한다

  • BuildManager 프로퍼티 : BuildManager 클래스에 대한 서비스
  • WaveManager 프로퍼티 : WaveManager 클래스에 대한 서비스
  • TileAnimator 프로퍼티 : TileAnimator 클래스에 대한 서비스
  • EnemySpawner 프로퍼티 : EnemySpawner 클래스에 대한 서비스
  • GridVisibilityController 프로퍼티 : GridVisibilityController 클래스에 대한 서비스
  • 각각의 서비스에 대해서 Register / Unregister 함수를 호출하여 서비스에 대해 등록 / 등록해제

 

3) PlayerInputHandler 클래스

 

PlayerInputHandler 클래스를 추가하여 유일하게 플레이어의 입력을 처리한다

멤버변수를 위와 같이 구성하여 입력과 관련된 로직을 처리한다

 

 

Awake 함수를 위와 같이 구성하여 PlayerInput 컴포넌트를 가져와 값을 설정한다

이후 OnEnable 함수와 OnDisable 함수에서 Input Actions 애셋의 ActionMap들활성화 / 비활성화한다

 

CameraController 관련 함수

 

 

Camera 액션 맵에 설정한 키를 입력하면 CameraController에서 함수를 호출하도록 설정한다

 

BuildManager와 UI_BuildBtns 관련 함수

 

Build 액션 맵에 설정한 키를 입력하면 BuildManagerUI_BuildBtns에서 함수를 호출한다

 

UI_Canvas 관련 함수

 

UI 액션 맵에 설정한 키를 입력하면 UI_Canvas에서 함수를 호출한다

 

4) GridVisibilityController 클래스

 

GridVisibilityController 클래스를 추가하여

TileAnimator 클래스에서 수행하던 타일맵의 시각 효과와 관련된 처리를 분리한다

멤버변수는 동일하게 분리한다

 

 

OnEnable 함수와 OnDisable 함수를 추가하여 서비스 로케이터에 클래스를 등록한다

 

기존 함수 (1)

 

기존 함수 (2)

 

기존 함수 (3)

 

위와 같이 기존의 함수들을 GridVisibilityController 클래스로 옮겨서 처리한다

 

5) LevelTransitionHandler 클래스

 

LevelTransitionHandler 클래스를 추가하여

WaveManager 클래스에서 처리하던 맵의 실시간 변경을 분리하여 처리한다

멤버변수는 동일하게 분리한다

 

기존 함수

 

위와 같이 기존의 함수들 LevelTransitionHandler 클래스로 옮겨서 처리한다

 

6) EnemySpawner 클래스

 

EnemySpawner 클래스를 추가하여

WaveManager 클래스에서 수행하던 포탈과 적등록 + 생성 + 제거하는 로직을 분리하여 처리한다

기존의 멤버변수를 동일하게 분리한다

 

 

OnEnable 함수와 OnDisable 함수를 추가하여 서비스 로케이터에 클래스를 등록한다

 

기존 함수 (1)

 

기존 함수 (2)

 

기존 함수 (3)

 

위와 같이 기존의 함수들 EnemySpawner 클래스로 옮겨서 처리한다

728x90
반응형