게임 프로그래머의 만담, 게임코디 2nd
0 투표
1.2k views 만담 (8kp) , 1.2k views
서버에서는 한 번 프레임워크가 잡히면 어떤 컨텐츠의 코드를 어디다 넣어야 하는지 고민되지가 않는데

클라이언트쪽은 잘 모르겠네요.

특히 유니티는 아무 곳에대나 아무 스크립트나 붙일수 있어서 더 그런것 같습니다 ㅎ

 

일단 생각해본건

1. MVC의 M은 각각의 클래스나 프리팹 요소들에 붙인다
2. MVC의 V는 화면에서 뷰로 인식할 수 있는. 화면 전체나 전체를 가리는 프리팹 창, 팝업 프리팹 창, 루트 격 UI요소에 붙인다
3. MVC의 C는 일단 프리팹은 아니고 필요에 따라 각각의 GameObject에 붙인다. (게임 로직을 굴리는 요소나 ObjectPool 등)

이렇게 생각하고 작업하고 있는데

* 프리팹이지만 같은 코드가 어디서는 Model, 어디서는 View 취급을 받는 문제
* 프리팹 안에 프리팹이 들어있어 때에 따라 View의 역할도 하지만 Model의 역할을 하는 프리팹 코드는?
* 컨트롤러에 의해 UI요소가 수정될 때 옵저버패턴으로 구현하려고 생각중인데 요즘은 또 UniTask와 Rx가 대세라던데.. 이렇게 바뀐 이유가 있을테니 처음부터 Rx를 배워서 만들어나가는게 좋을까?

뭐 이런 생각들을 하고있네요 ㅎ;;

만담에 대한 답글을 하려면 로그인 또는 가입해야합니다.

3 answers

+4 투표
우수 답변

저는 엄격하게 MVC나누지는 않고요,

일단 모델은 따로 떼어내서 순수 클래스로 구현합니다.

이렇게 하면 json serialize해서 파일로 저장/로드/네트웍 전송 하기에는 정말 편해집니다.

마치 디비처럼 순수 데이터만 들고 있는거죠. 프리팹도 없고 MonoBehaviour도 상속 안받습니다.

 

클래스별로 분류해보면

UserManager(모델)

- 유저관련 클래스들.

- Account

- Inventory

- Skill

 

DataManager(모델)

- 게임 데이터 모음(캐릭터, 몬스터, 맵, 아이템, 스킬...)

 

GameManager(로직)

- 각종 로직 클래스들 모음

 

UIManager(뷰)

- 주로 UI팝업 클래스들 관리

 

 

하다보면 자잘하게 바뀔때도 있지만 제일 큰 목적은 

복잡도를 낮추고 최대한 편하게 코딩 하자

누가봐도 구조만 파악하면 뭐를 어디에 넣어야 할지 바로 알 수 있게 하자

입니다.

한마디로 유연하면서 규격화된(?) 구조로 가는 거죠.

 

데이터 접근은 UserManager

UI접근은 UIManager

로직 접근은 GameManager

 

여기에 협업까지 생각한다면 로직 부분을 좀 더 세분화 합니다.

수많은 로직들을 담당하는 각 클래스들을 GameManager밑에 두고

지들끼리는 메시지(Enum)로 통신하게 하는 겁니다. (유니티의 SendMessage보다는 pub/sub로 자체 구현)

이렇게 구성해 놓으면 메시지만 정의해 놓고 각 작업자들이 따로 작업한 뒤 나중에 연동하는것도 가능해지죠.

같은 GameManager밑에 붙어있지만 GetComponent안쓰고 메시지로 주고 받도록 규칙을 정하는 겁니다.

가까운 길을 놔두고 멀리 돌아가는것 처럼 보일 수도 있는데

프로젝트가 커져도 코드 관계가 깔끔해진다는 장점이 있습니다.

물론 서로 밀접한 관련이 있는 경우에 한해서는 서로 직접 참조할 수도 있고요.

어느 한쪽만 밀고 가기보단 둘을 잘 섞어쓰는게 좋은것 같습니다.

 

답글 (1.9kp)
선택됨
제 생각과 출발이 매우 비슷하시네요! 좋은 참고가 되었습니다. 감사합니다!
+3 투표
이럴때 명언이 있습니다.

"엿장수맘대로다"

 

저라면 제 맘대로 가고, 사후 리팩토링 ㄱㄱㄱ
답글 (412p)
저도 일단은 토이프로젝트라 이러고 있습니다 ㅎ
+1 vote
유니티는 음.. MVC로 구조를 잡으면 너무 난잡해지는거 같던데.. 물론 제가 실력이 허접해서 그럴수도 있습니다;;

그래서 전 유니티에서 추구하는데로 걍 콤포넌트 줄줄이 만들어서 오브젝트에 붙이고 때고 하는 방식으로 요즘엔 하고있어요.
답글 (5.5kp)

게임 프로그래머의 만담 커뮤니티, 게임코디 입니다

온종일 코드와 씨름하는 우리들의 외로움을 삭이고자 합니다