- 개요
플레이어가 장착한 아이템과 아이템으로 인해 증가한 능력치를 보여주는 스탯창 UI를 작업해보겠습니다.
1) 사전 작업 - 서버와 클라이언트의 json 파싱 방식 통일
클라이언트에서 기존에 사용하던 json 파싱 방식이 서버의 json 파싱 방식과 달라
파싱된 데이터가 호환되지 않는 문제가 발생하였습니다.
따라서 이 문제를 수정하였습니다.
1 - 1) 서버에서의 작업


해당 패키지의 Path 값을 복사하여 해당 디렉토리로 이동합니다.


Unity와 호환이 가능한 net45 파일로 이동하여 dll 파일을 복사합니다.
1 - 2) 클라이언트에서의 작업

복사한 dll 파일을 프로젝트의 Libs 폴더에 붙여넣기하면 해당 패키지를 Unity에서도 사용할 수 있습니다.
2) 클라이언트 사이드
2 - 1) UI_Stat 클래스

스탯창 UI를 구성하는 하위 UI들을 의미하는 2개의 열거형을 추가합니다.
- Images 열거형 : 투구 / 갑옷 / 신발 / 무기 / 방패
- Texts 열거형 : 플레이어 이름 / 플레이어의 공격력 / 플레이어의 방어력

초기화 여부를 판단하는 _init 멤버변수를 추가합니다.
또 Init 함수를 오버라이드하고 위와 같이 로직을 구성하였습니다.
Images 열거형과 Texts 열거형을 각각 Image 컴포넌트와 Text 컴포넌트의 GameObject로 연결합니다.
이후 RefreshUI 함수를 호출하여 스탯창 UI를 초기화합니다.

RefreshUI 함수의 로직은 위와 같습니다.
- Init 함수가 제대로 수행되지 않았다면, 얼리 리턴
- 초기화 하기 이전에 착용한 장비를 보여주는 UI의 Image 컴포넌트 비활성화
- 인벤토리의 아이템을 순회하면서 착용했다면 해당 아이템을 UI에 표시
- 아이템의 순회가 끝나면 플레이어의 이름 / 플레이어의 최종 공격력 / 플레이어의 방어력 표시
2 - 2) UI_InventoryItem 클래스

Init 함수에서 아이템을 가져오지 못했다면 얼리리턴하도록 로직을 추가합니다.

SetItem 함수에서 UI에서 표현할 아이템이 null인 경우에 대비하는 로직을 추가합니다.
2 - 3) PacketHandler 클래스

S_ItemListHandler 함수와 같이 인벤토리 UI처럼 스탯창 UI도 초기화하는 로직을 추가합니다.
각각 S_AddItemHandler 함수 / S_EquipItemHandler 함수에서 수행합니다.
2 - 4) MyPlayerController 클래스

GetUIKeyInput 함수에 위와 같이 C키를 누르면 스탯창 UI를 열고 닫는 로직을 추가합니다.
2 - 5) DataManager 클래스

LoadJson 함수에서 기존의 방식 대신 서버와 동일한 Newtonsoft 패키지를 사용하도록 수정합니다.
2 - 6) BaseController 클래스

Stat 프로퍼티에서 MergeFrom을 사용하여 대입연산자를 사용하지 않고 값을 설정하도록 수정합니다.
- 최종 실행 결과
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (6) 라이브서비스' 카테고리의 다른 글
| 2D MMO 라이브 서비스 - (2 - 2) 대형 게임 구조 관리 이론 (0) | 2025.09.30 |
|---|---|
| 2D MMO 라이브 서비스 - (2 - 1) Job 예약 취소 (0) | 2025.09.30 |
| 2D MMO 라이브 서비스 - (1 - 15) 아이템 착용 (3) (0) | 2025.09.23 |
| 2D MMO 라이브 서비스 - (1 - 14) 아이템 착용 (2) (0) | 2025.09.23 |
| 2D MMO 라이브 서비스 - (1 - 13) 아이템 착용 (1) (0) | 2025.09.23 |