#40 클래스 구조 만들기

국기웅·2024년 6월 19일

새로운 팀 프로젝트를 만들면서 클래스의 구조를 생각해보았다.
앞으로 다른 개발을 진행하더라도, 여기서의 방식을 참고하면 좋을 것 같다.

이번에 개발할 게임은 디펜스 2D장르이다.
레퍼런스 게임은 메이플운빨디펜스를 참고하였다.

제일 먼저 고려한 부분은 Singleton으로 구현되는 스크립트이다.
GameManager, SceneManager 등이 여기에 포함된다.
하지만 이전에 프로젝트에서 진행했다시피, GameManager.instance.Player.~~~으로 다른 스크립트들을 포함시켜줄 수 있다.

싱글톤으로 구현된 인스턴스는 다음과 같은 특징이 있다.
1. 유일한 인스턴스이다. 단 하나만 존재 가능하다-> 고유한 값만 가진다.
2. 하지만 결합도가 늘어나 게임매니저가 슈퍼클래스가 될 가능성이 존재한다.
3. 전역에서 접근이 가능하기에, 무분별하게 사용되고, 복잡해질 수 있다.

위 특징을 고려하여, 어떠한 변수를 넣어줄지 고려해야한다.

게임매니저는 플레이어와 ObjectPool을 받는다.
플레이어는 강화나 구매에 필요한 GOLD와 같은 고유값을 넣어야 하기 때문에,
ObjectPool은 전역적으로 다른 오브젝트들도 사용해야 하기 때문에 SingleTon이어도 괜찮다고 판단하였다.

Player는 UIPlayerSpec을 받아간다.
이건 조금 걱정인 부분이기도 한데, 스크립트를 거쳐가면서 호출시 스크립트가 길어지기도 하고.. 괜히 가지가 길어지는건 아닌가 하는 고민이 있다.

다만 UIPlayerSpec으로 나눈것은 이를 UI에 넣으면 어떨까 해서 진행되었다.(비록 진행중에 UIManager를 만들면서 조금 거리가 멀어졌지만..)

이후에 UIPlayerSpec이 가진 변수는 다음과 같다
"보유 금액, 현재 스테이지, 남아있는 몬스터 수, 강화 수치"
다른 스크립트에서접근하기 쉽도록 넣어두었다.
동시에 UIManager스크립트도 가지고 있다.
이 부분은 차후 리펙토링 거치면서 합치는것도 나쁘지 않을 것 같다. 다만 UI 에 직접적인 관여를 하기 때문에 분업을 위해 지금 분리되어 있는 상황이다.

스테이지 스크립트는 적을 생성하는 역할을 진행한다.
현재 스테이지가 몇인지 게임매니저에서 받아와 그에 따른 체력,마리수를 판단한다. 그에 따라 반복문을 진행하고, 몬스터의 스펙을 바꿔준다.

몬스터 스크립트는 Objectpool로 소환될 프리펩에 들어갈 스크립트이다. 계속해서 맵을 돌면서, 체력이 줄어들면 disable되는 특징을 살리면 될 것 같다.(동시에 게임매니저에서 남은 유닛 수를 줄여줘야 한다)

강화 스크립트는 게임매니저에 있는 강화 수치를 올려준다. 동시에 골드도 줄어든다
게임매니저의 강화수치는 아군 유닛이 공격할 때 보정치라고 생각해도 될 것 같다.

유닛 스크립트는 공격을 진행한다. 이때 게임매니저에서 보정치를 받아 공격한다. Objectpool로 소환되고, Scriptable object로 관리된다. 해당 스펙은 생성될때 변경되고 판매될때까지 유지된다.

판매 스크립트는 클릭된 오브젝트를 판매한다.
몬스터와 아군 유닛은 클릭될 수 있는데 이 정보는 GameManager에서 받아간다. 해당 유닛이 아군 유닛일때, 버튼을 클릭하면 판매할 수 있다.

뽑기 스크립트는 클릭되었을때 랜덤으로 아군유닛을 소환한다. 확률로 스펙을 정하고, 해당 스펙을 objectpool에 있는 캐릭터의 SO를 수정해준다.


이정도면 나름 스크립트를 잘 나눈거라고 생각된다..
참고해서 다음 프로젝트를 준비하면 좋을 것 같다.

profile
게임개발호소인

0개의 댓글