모름

실행영상

 

 

대략 9일동안 따라한 튜토리얼 결과물입니다.

 

 

 


 

 

 

다이어그램

 

 

이번 튜토리얼을 시작하면서 UML 클래스 다이어그램으로 코드 구조를 정리하려고 하는게 목표였습니다. 왜냐하면 어차피 코드 내 내용은 다 외우지 못할것같고, 그나마 기억할수 있는게 구조라고 생각했기 때문입니다. 그리고 다이어그램에서 접근자하고 타입은 따로 지정해주지 않았습니다. 

 

 

오디오

 싱글톤 패턴이 적용된 AudioManager 클래스 에서 오디오 실행 함수를 관리합니다. 예를 들어 PlaySound(), SetVolume() 과 같이요. 그리고 코루틴 함수인 AnimateMusicCrossFade() 에선 배경음이 교차할때 자연스럽게 볼륨이 크로스되며 바뀌도록해줍니다. 필드내 변수인 배경음 그룹(musicSources) Mathf.Lerp()를 통해 이전 음악은 1에서 0으로, 바뀔 음악은 0에서 1로 바꿔주면서 자연스러운 배경음 교체가 이루어집니다.

 또한 인상깊었던 점은 SoundLibrary 클래스였습니다. 이 클래스에서 사운드 그룹과 그룹 ID를 정해주어 모든 사운드를 보기좋게 관리할수있고 또 AudioManager 에서도 쉽게 음악 리소스에 접근할수 있게됩니다.

 

 

맵 제너레이터와 스폰 시스템

 위 부분은 이 튜토리얼의 꽃이라고 말할 정도로 재밌는 부분이었습니다. MapGenerator 에선 클래스명 그대로 맵을 만드는 기능을 합니다. MapGenerator의 맵에 관한 정보를 Spawner 에서 참조하여, 에너미를 스폰, 플레이어를 스폰 등을  구현합니다. MapEditor 도 처음 만져본 기능이었는데, 내용은 별거 없지만 클래스를 유니티 GUI (인스펙터)에 노출시켜 에디터 상에서 맵 생성기를 작동시켜줬습니다.

 

 

UI

유아이는 사실 조금 지루하긴 했지만 그래도 체계적으로 정리해나가는 재미가 있었습니다. GameUI 클래스는 Spawner 클래스와 Player 클래스에 대해 연관관계입니다. GameUI 클래스에선 Spawner 클래스의 OnNewWave(새로운 웨이브)를 구독하여 웨이브가 새로 시작될때마다 특정 UI 를 뛰우게 됩니다. 또한 플레이어 클래스OnDeath (Action 델리게이트) 를 구독하여 플레이어가 죽으면 이에 맞는 특정 UI를 띄웁니다.

 

 

에너미와 플레이어

에너미와 플레이어는 데미지 처리가 필요한 오브젝트기 때문에, IDamageable(데미지입을수있는)라는 인터페이스를 상속받은 Living Entity 클래스를 상속받습니다. 그래서 에너미와 플레이어에 대해서 체력설정 및 죽음에 대한 처리가 간편했습니다.

 플레이어는 Player 클래스에서 행동 요청을 PlayerControllerGunController 클래스로 보냅니다. 이 두 클래스에서 실질적으로 요청된 행동을 수행하게 됩니다. 튜토리얼 저자께선 이렇게 지휘관(Player)을 두고 클래스를 관리하는게 좋아하는 스타일이라 하십니다.

 

 

총기 시스템

플레이어는 GunController에게 총을 쏘라는 메세지를 보냅니다. 그리고 GunController는 이 메세지를 Gun 스크립트에 보내는데요. 이 부분에서 플레이어와 총기간 오브젝트의 협력이 발생합니다. 이어서 건은 메세지를 처리하기 위해 Projectile 클래스, MuzzleFlash 클래스 등에 다시 메세지를 보내면서 총기 시스템 구현이 완료됩니다.

 

 

유틸리티

마지막으로 유틸리티 클래스에선 맵 생성기에서 쓰일 유틸리티인 배열을 셔플해 반환하는 메소드를 제공합니다.

 

 

 


 

 

 

후기

 

이상 무