대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발/(6) 라이브서비스

2D MMO 라이브 서비스 - (1 - 14) 아이템 착용 (2)

monstro 2025. 9. 23. 14:01
728x90
반응형

- 개요

클라이언트에서 아이템이 들어있는 인벤토리의 슬롯을 클릭하면 아이템을 장착할 수 있도록 작업하겠습니다.

 

1) 클라이언트 사이드

1 - 1) UI_Inventory 클래스

Init 함수 수정

 

RefreshUI 함수 수정

 

UI_Inventory 클래스를 포함하는 클래스인 UI_GameScene의 Init 함수에서 포함되는 클래스를 비활성화합니다.

따라서 필요한 부분에서 RefreshUI 함수를 호출할 수 없어 문제가 발생합니다.

따라서 Awake 함수에 포함된 Init 함수에서 RefreshUI 함수를 호출하도록 수정하여 인벤토리를 새로고침합니다.

최종적으로 UI_Inevntory 오브젝트가 활성화되면 RefreshUI 함수를 호출합니다.

 

 

 1 - 2) UI_Inventory_Item 클래스

 

위와 같이 멤버변수와 프로퍼티를 추가합니다.

  • _frame 멤버변수 : 아이템이 장착되어 있는 경우 활성화되는 UI
  • ItemDbId 프로퍼티 : 현재 해당 아이템의 ID
  • TemplateId 프로퍼티 : 해당 아이템의 원본 ID
  • Count 프로퍼티 : 현재 해당 아이템의 개수
  • Equipped 프로퍼티 : 현재 해당 아이템의 장착 여부 

 

 

Init 함수를 위와 같이 추가합니다.

아이템의 이미지 UI에 클릭되면 호출하는 이벤트를 바인드합니다.

  • C_EquipItem 패킷 생성
  • 해당 패킷의 ItemDbId와 Equipped 설정
  • 서버로 C_EquipItem 패킷 전송

 

 

SetItem 함수를 위와 같이 수정합니다.

추가한 4개의 프로퍼티를 인자로 받은 Item의 값으로 설정합니다.

이후 장착 UI의 gameObject를 설정합니다.

 

1 - 3) Item 클래스

 

 

메모리에서 사용하는 Item 클래스에서 Equipped 속성을 설정할 수 있도록 수정합니다.

 

1 - 4) PacketHandler 클래스

 

S_AddITemHandler 함수에서 아이템을 획득하여 메모리에 저장한 후 인벤토리 UI를 새로고침합니다.

 

 

서버에서 전달된 S_EquipItem 패킷에 대응하는 S_EquipItemHandler 함수를 위와 같이 정의합니다.

받은 패킷의 ItemDbId에 해당하는 Item을 가져와 메모리에 저장합니다.

해당 아이템의 Equipped 여부를 설정한 후에 인벤토리 UI를 새로고침합니다.

 

- 최종 실행 결과

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

728x90
반응형