CREATE YOUR WORLD
Players & Characters : Advance...

로컬 플레이어 의상 갈아입기

15min

로컬 플레이어의 의상을 소유한 의상으로 변경할 수 있습니다.

ZEPETO.Character.Controller 1.11.3 이상 버전을 설치해야 합니다.

SetCostume API 사용하기

메서드

API

설명

SetCostume($itemCode: string, $complete?: System.Action):void;

로컬 플레이어의 의상을 변경하기 위해 아이템 코드(아이템 ID)를 인수 값으로 입력합니다. 의상 변경이 완료되면 콜백을 받습니다.



로컬 플레이어 의상 변경 예제

로컬 플레이어의 의상을 SetCostume().

장면이 시작될 때 로컬 플레이어를 생성하고, 로컬 플레이어가 생성될 때 특정 아이템 코드로 의상을 변경하는 예제 코드입니다.

1) ZEPETO > Typescript를 추가하고 스크립트 이름을 ChangeLocalPlayerCostume으로 설정합니다.

아래와 같이 샘플 스크립트를 작성합니다.

ChangeLocalPlayerCostume.ts


스크립트 설명

  • 이 스크립트는 주어진 아이템 코드에 따라 로컬 플레이어의 의상을 변경합니다.
  • 장면이 시작되면, 지정된 사용자 ID로 플레이어를 생성하고 CreatePlayerWithUserId() 함수를 사용합니다.
  • 로컬 플레이어가 추가될 때 해당 이벤트가 트리거되도록 OnAddedLocalPlayer 이벤트 리스너가 추가되며, ChangeCostume() 메서드가 호출되어 의상이 변경됩니다.
  • LocalPlayer 속성을 통해 로컬 플레이어 인스턴스에 접근하고 제공된 아이템 코드를 사용하여 의상을 변경합니다. 의상 변경이 완료되면, Set Costume Complete 메시지가 기록되어 성공적인 변경을 나타냅니다.



📘 아이템 ID를 확인하는 방법에 대한 마네킹 가이드를 참조하십시오. [ZEPETO 마네킹]



2) [▶︎(재생)] 버튼을 눌러 실행하면 입력한 아이템 코드에 따라 의상이 변경된 로컬 플레이어가 생성되는 것을 볼 수 있습니다.

Document image


의상 변경 전(왼쪽), 의상 변경 후(오른쪽)



  • 아이템이 정기 상품인 경우, 만료 여부를 확인한 후 착용됩니다. 만료된 아이템에 대해서는 다음과 같은 오류 로그가 호출됩니다: 만료된 아이템이 호출됩니다.
  • 아이템이 Zem 유료 상품인 경우, 로컬 플레이어가 소유하고 있는지 확인한 후 착용됩니다. 소유하지 않은 아이템에 대해서는 다음과 같은 오류 로그가 호출됩니다: 아이템 코드 없음이 호출됩니다.





아이템 목록 로딩 및 의상 변경 예시.

사용자가 소유한 아이템에 대한 정보를 제공하는 GetMyItemListAsync(), 를 활용하여 의상 아이템 목록을 가져올 수 있습니다.

다음 예시는 로컬 플레이어가 소유한 의상을 화면에 표시하고 선택하여 의상을 변경할 수 있도록 하는 방법을 보여줍니다.



1단계. 의상 목록 UI 생성

먼저, 의상 목록의 썸네일과 이름이 표시될 UI 목록 리소스를 생성합니다. 제작해야 할 리소스는 다음과 같습니다:

1단계-1. 아이템 프리팹 생성

로컬 플레이어가 소유한 의상 목록을 로딩한 후, UI에서 아이템 목록을 생성합니다. 아이템 프리팹은 생성되는 각 아이템 목록의 소스 역할을 합니다.

아이템 프리팹이 생성되면, 썸네일과 아이템 이름이 UI에 표시됩니다.

아이템 프리팹은 다음 요소를 포함합니다.

  1. Button_thumbnail 객체: 이 객체는 아이템의 썸네일 이미지를 표시하기 위해 Raw Image 구성 요소와 Button 구성 요소가 등록된 객체입니다.
  2. Text_name 객체: 아이템 이름이 표시될 Text 구성 요소 객체입니다.
Document image




1-2단계. 캔버스 설정

캔버스는 아이템 프리팹이 생성될 때 표시되는 UI 화면입니다. 많은 아이템 목록을 가져올 수 있도록 이 캔버스 안에 스크롤 뷰를 만드는 것이 좋습니다.

캔버스 안의 스크롤 뷰 객체는 다음과 같이 설정됩니다.

  • 스크롤 뷰 객체는 수직 스크롤만 허용하도록 설정됩니다.
  • 콘텐츠 객체는 다음 구성 요소를 설정합니다:
    • 그리드 레이아웃 그룹:
      • 셀 크기 : x: 150, Y: 150
      • 제약 조건 : 고정 열 수
      • 제약 수 : 5
Document image




2단계. 아이템 목록을 로드하고 의상을 변경하는 스크립트

단계 2-1. 스크립트 작성하기

  • ZEPETO 추가 > Typescript로 스크립트 이름을 MyItemList로 변경합니다.
  • 아래와 같이 샘플 스크립트를 작성합니다.
MyItemList.ts


스크립트 설명

  • 시작 메서드에서 새로운 플레이어가 ZepetoPlayers.instance.CreatePlayerWithUserId()를 사용하여 생성됩니다.CoGetMyItem() 코루틴은 로컬 플레이어가 추가될 때 실행됩니다.
  • CoGetMyItem() 코루틴은 ShopService.GetMyContentItemListAsync()를 사용하여 플레이어가 소유한 아이템 목록을 검색합니다.
    • 모든 카테고리의 모든 아이템 목록을 ItemKeyword.all을 통해 요청합니다. 요청이 완료될 때까지 기다립니다: yield new WaitUntil(() => requestItemList.keepWaiting == false).
    • 요청이 성공하면 requestItemList.responseData.isSuccess, 아이템 목록을 반복하여 contentItems을 가져오고 각 아이템의 썸네일 이미지를 GetThumbnailAsync().
    • 제공된 itemPrefab을 사용하여 각 아이템에 대한 UI 요소를 생성하고, 썸네일 이미지와 ID를 설정합니다. 각 아이템에 대한 버튼이 생성되며, SetItemButton()을 호출하도록 설정됩니다.
  • SetItemButton() 메서드는 아이템과 연결된 버튼이 클릭될 때 호출됩니다.
    • 선택한 아이템을 플레이어의 캐릭터 의상으로 적용합니다: ZepetoPlayers.instance.LocalPlayer.SetCostume().
    • 의상이 성공적으로 변경되면, 다음과 같은 로그 메시지가 표시됩니다: 의상 설정 완료과 함께 아이템 코드가 표시됩니다.



📘

  • 사용자의 아이템 정보를 확인하는 방법에 대한 다음 가이드를 참조하십시오 ShopService.GetMyContentItemListAsync(). [사용자가 보유한 아이템 정보 가져오기]
  • 사용자가 소유한 아이템을 검색할 때, ItemKeyword를 사용하여 카테고리별로 검색하고 UI에 목록으로 표시할 수 있습니다.



❗️ 주의 다음에서 검색된 의류 목록은 ShopService.GetMyContentItemListAsync() 만료된 기간 한정 제품을 포함합니다. 따라서 만료된 항목 오류 로그를 호출할 수 있습니다.



STEP 2-2. MyItemList 검사기 설정

1단계에서 생성된 itemPrefab을 MyItemList가 적용된 구성 요소의 Item Prefab에 등록하고, itemCanvas에 Canvas를 등록합니다.

Document image




3단계. 실행

재생 버튼을 눌러 실행하면, 캔버스 UI에 로컬 플레이어가 소유한 아이템 목록이 표시되며, 선택할 때 해당 의상으로 변경되는 것을 볼 수 있습니다.

Document image




❗️ 주의

  • 이 의상 착용 API는 로컬 플레이어에게만 적용되며 현재 멀티플레이어 동기화를 지원하지 않습니다.
  • 의상 멀티플레이어 동기화는 향후 제공될 예정입니다.