C#과 유니티로 만드는 MMORPG 게임 개발 시리즈

Client API

ChaYong 2023. 12. 22. 22:11

◎ Rookiss님의 [  C#과 유니티로 만드는 MMORPG 게임 개발 시리즈 ] 관련한 Client API 

- 본 내용은 PC에서 보실 것을 권장해요 -

 

사실 Rookiss님 강의를 보고나면 처음에는 멍~을 타게 되죠?. 물론 머리 속 어딘가에서 가물가물하게 뭔가 떠오르기는 하는데 대체 앞으로 뭘 더 어떻게 진행해야 할지 막막해요. 저도 그랬습니다. 이후 코드를 만저보면서 하나씩 정리를 하다보니 이제야 앞으로 어떻게 풀어나가야 할지 감을 잡은 느낌이네요.

 

Rookiss님의 최종 프로젝트는 쉽게 말해 게임 제작툴이에요.(이하 rookiss Game Development Framework, 약칭 rookissGDF라고 할게요.) 강의를 다 들으신 분들이 다음으로 하셔야 할 일은 rookissGDF를 조금씩 수정 해 보셔야 해요. 그러기 위해 rookissGDF 에서 사용 가능한 함수들을 알아볼게요.

 

여기서 가장 핵심이 되는 것이 바로 Managers이에요.


1. Managers

Managers는 클라이언트 측 코드 어디서에서든 접근이 가능하며, 아래와 같은 방식으로 Managers를 통해 인벤토리 관리자, 맵 관리자 등에 접근이 가능합니다.

 

Managers.Inven : 인벤토리 매니저에 접근
Managers.Map : 맵 매니저에 접근
Managers.Object : 오브젝트 매니저에 접근
Managers.Network : 네트워크 매니저에 접근
Managers.Web : 웹매니저에 접근

Managers.Data : 데이터시트 매니저에 접근
Managers.Pool : 풀 매니저에 접근
Managers.Resource : 리소스 매니저에 접근
Managers.Scene : 씬 매니저에 접근
Managers.Sound : 사운드 매니저에 접근
Managers.UI : UI 매니저에 접근

 

Rookiss님 최종 프로젝트에서 접근 할 수 있는 녀석은 기본적으로 위와 같이 11가지이나 본인이 추가하고 싶은 새로운 매니저가 있다면 추가가 가능합니다.


2. 인벤토리 함수

우리가 인벤토리UI를 표시하기 위해서 메모리상 들고 있는 인벤토리 정보가 필요해요 이는 InventoryManager에 들어있습니다.

 

Managers.Inven.Add(아이템) : 아이템 추가

Managers.Inven.Get(아이템번호) : 인벤토리 내에서 특정 아이템 가져오기

Managers.Inven.Find(조건) : 인벤토리 내에서 특정 조건의 아이템 가져오기

Managers.Inven.Clear() : 인벤토리 정리


3. 맵 함수

맵과 관련된 함수로는 다음과 같습니다.

 

Managers.Map.CanGo(칸) : 특정 칸(cellPos)에 갈 수 있는지 확인

Managers.Map.LoadMap(맵번호) : 특정 맵 로드작업(충돌정보 긁어옴)

Managers.Map.DestroyMap() : 현재 맵 파괴

Managers.Map.FindPath(시작칸, 목적칸, 목적지 충돌 무시 여부) : '시작칸'에서 '목적칸'까지 노선 검사


4. 오브젝트 관리자 함수

Object 관리자는 현재 맵에 있는 모든 플레이어, 몬스터, 화살(=발사체)의 목록을 들고 있어요.

 

ObjectManager.GetObjectTypeById(오브젝트 아이디) : 특정 오브젝트의 타입확인

Managers.Object.Add(ObjectInfo info) : 특정 오브젝트를 목록에 추가

Managers.Object.Remove(오브젝트 아이디) : 특정 오브젝트 삭제

Managers.Object.FindById(오브젝트 아이디) : 특정 오브젝트 가져오기

                                                                          (GameObject타입으로 반환됨)

Managers.Object.Find(조건) : 특정 조건의 오브젝트 가져오기

Managers.Object.Clear() : 관리자가 들고 있는 오브젝트 정보 싹 지우기

Managers.FindCreature(칸) : 특정 칸(cellPos)에 있는 오브젝트 찾기


5. 네트워크 함수

클라이언트에서 게임서버로 특정 정보를 전송하려면 패킷을 생성하여 서버로 보내야 해요.

 

Managers.Network.Send(패킷) : 패킷을 서버에 보내기

Managers.Network.ConnectToGame(ServerInfo info) : ServerInfo값의 서버로 접속하기


6. 웹 함수

클라이언트가 게임서버와 통신하기 위해서 위 네트워크 함수를 사용하지만, 클라이언트가 AccountServer와 통신하기 위하여는 위의 네트워크 함수가 아니라 웹 함수를 사용하셔야 해요. 왜냐하면 AccountServer는 소켓서버가 아니라 웹서버이기 때문입니다.

 

Managers.Web.BaseUrl : 웹서버의 주소

Managers.Web.SendPosRequest<T>(string url, object obj, Action<T> result)

: 특정 url로 T타입의 object패킷을 쏘아보내고 답변이 오면 그 값을 인자로 받는 result 액션 등록 함수 실행


7. 데이터 프로퍼티

데이터시트는 플레이어나 몬스터, 아이템의 기본 정보를 정의해 놓은 Json파일이죠? 게임을 실행하면 메모리에 미리 띄워놓은 상태라서 언제든 접근하여 해당 정보를 긁어올 수 있습니다.

 

Managers.Data.SkillDic : Json형태로 미리 정의해놓은 스킬 데이터시트를 긁어오기

Managers.Data.ItemDic : Json형태로 미리 정의해놓은 아이템 데이터시트를 긁어오기

Managers.Data.MonsterDic : Json형태로 미리 정의해놓은 몬스터 데이터시트를 긁어오기


7. 자체 리소스 매니저 함수

원래 유니티에는 리소스 매니저가 따로 존재하지만 rookissGDF에서는 따로 Managers를 통해 접근하는 자체 리소스 매니저가 존재하죠?

 

Managers.Resource.Load<T>(string 경로) : 특정 경로에 있는 리소스 로드작업

Managers.Resource.Destroy(게임오브젝트) : 특정 게임오브젝트 삭제

Managers.Resource.Instantiate(string 경로, Transform 부모)

: 특정 경로에 있는 리소스를 특정 부모의 자식으로 생성


8. 오브젝트 풀 관련 함수(게임제작시 특별히 사용 안해도 됨)

사실 프리팹에 Poolable스크립트를 붙이면 이를 자체리소스 매니저를 통해 생성하면 자동으로 풀링작업을 해줘요

 

Managers.Pool.CreatePool(GameObject original, int count = 5) : 풀을 만들기

Managers.Pool.Pop(GameObject original, Transfom 부모) : 풀에서 빼기

Managers.Pool.Push(Poolable poolable) : 풀에 다시 집어넣기

Managers.Pool.GetOriginal(이름) : 특정 이름의 원본 오브젝트를 가져오기

Managers.Pool.Clear() : 풀 정리 


9. 씬 프로퍼티와 함수

이 역시 유니티에 있는 함수지만 rookissGDF에서는 따로 만들어져 있어요

 

Managers.Scene.CurrentScene : 현재 씬 정보를 반환 (BaseScene타입으로 반환)

 

Managers.Scene.Clear() : (씬 Load시 자동실행) CurrentScene정보를 날려주기

Managers.Scene.LoadScene(Define.Scene type) : 특정씬 불러오기


10. 사운드 함수

rookissGDF에 있는 사운드 재생 관련 함수에요. 내부에서는 리소스를 자동으로 로드하고 심지어 풀링까지 해주는 고마운 녀석이에요.

 

Managers.Sound.Play(경로, 사운드 타입, 볼륨) : 특정 경로의 사운드를 재생 (볼륨 수치 크기로)

Managers.Sound.Play(오디오클립, 사운드 타입, 볼륨) : 특정 오디오클립을 재생 (볼륨 수치 크기로)

Managers.Sound.Clear() : 로드된 오디오 클립을 날려주기


11. UI 프로퍼티와 함수

rookissGDF에 있는 UI 프로퍼티와 함수에요. UI를 쉽게 띄을 수 있게 작업을 해놨었죠?

 

Managers.UI.SceneUI : 현재의 SceneUI를 가져오기 (UI_Scene타입으로 반환)

 

Managers.UI.SetCanvas(GameObject canvas, bool sort) : 캔버스에 소팅을(표시우선순위) 적용시킬 것지

Managers.UI.MakeWorldSpaceUI<T>(Transform 부모, 이름) : T스크립트를 붙인 UI를 월드공간에 로드

Managers.UI.MakeSubItem<T>(이름) : SubItem폴더의 특정 녀석에게 T스크립트를 붙여 로드

Managers.UI.ShowSceneUI<T>(이름) : SceneUI폴더의 특정 녀석에게 T스크립트를 붙여 로드

Managers.UI.ShowPopupUI<T>(이름) : PopupUI폴더의 특정 녀석에게 T스크립트를 붙여 로드

Managers.UI.ClosePopupUI(UI_Popup popup) : 특정 popupUI를 닫기

Managers.UI.ClosePopupUI() : 화면 가장 앞의 popupUI를 닫기

Managers.UI.CloseAllPopupUI() : 모든 popupUI 끄기

Managers.UI.Clear() : 들고 있는 SceneUI, PopupUI를 닫기