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 import { spawninfo, zepetoplayers } from 'zepeto character controller'; import { zepetoscriptbehaviour } from 'zepeto script'; import { worldservice } from 'zepeto world'; export default class changelocalplayercostume extends zepetoscriptbehaviour { public itemcode string; // 장면이 시작될 때, 제공된 사용자 id로 플레이어를 생성하고 의상을 변경합니다 start() { // 지정된 사용자 id로 새 플레이어를 생성합니다 zepetoplayers instance createplayerwithuserid(worldservice userid, new spawninfo(), true); // 로컬 플레이어가 추가될 때 트리거되는 onaddedlocalplayer 이벤트에 리스너를 추가합니다 zepetoplayers instance onaddedlocalplayer addlistener(() => { // 제공된 아이템 코드로 changecostume 메서드를 호출하여 의상을 변경합니다 this changecostume(this itemcode); }); } // 제공된 아이템 코드를 사용하여 로컬 플레이어의 의상을 변경하는 메서드입니다 changecostume(itemcode string) { // localplayer 속성을 사용하여 로컬 플레이어 인스턴스에 접근하고 제공된 아이템 코드로 의상을 설정합니다 zepetoplayers instance localplayer setcostume(itemcode, () => { // 의상 변경이 완료되면 성공적인 변경을 나타내는 메시지를 로그에 기록합니다 console log(`의상 설정 완료 ${itemcode}`); }); } } 스크립트 설명 이 스크립트는 주어진 아이템 코드에 따라 로컬 플레이어의 의상을 변경합니다 장면이 시작되면, 지정된 사용자 id로 플레이어를 생성하고 createplayerwithuserid() 함수를 사용합니다 로컬 플레이어가 추가될 때 해당 이벤트가 트리거되도록 onaddedlocalplayer 이벤트 리스너가 추가되며, changecostume() 메서드가 호출되어 의상이 변경됩니다 localplayer 속성을 통해 로컬 플레이어 인스턴스에 접근하고 제공된 아이템 코드를 사용하여 의상을 변경합니다 의상 변경이 완료되면, set costume complete 메시지가 기록되어 성공적인 변경을 나타냅니다 📘 아이템 id를 확인하는 방법에 대한 마네킹 가이드를 참조하십시오 \[ zepeto 마네킹 docid\ v62gk uu8iiscyhfo j85 ] 2\) \[▶︎(재생)] 버튼을 눌러 실행하면 입력한 아이템 코드에 따라 의상이 변경된 로컬 플레이어가 생성되는 것을 볼 수 있습니다 의상 변경 전(왼쪽), 의상 변경 후(오른쪽) 아이템이 정기 상품인 경우, 만료 여부를 확인한 후 착용됩니다 만료된 아이템에 대해서는 다음과 같은 오류 로그가 호출됩니다 만료된 아이템 이 호출됩니다 아이템이 zem 유료 상품인 경우, 로컬 플레이어가 소유하고 있는지 확인한 후 착용됩니다 소유하지 않은 아이템에 대해서는 다음과 같은 오류 로그가 호출됩니다 아이템 코드 없음 이 호출됩니다 아이템 목록 로딩 및 의상 변경 예시 사용자가 소유한 아이템에 대한 정보를 제공하는 getmyitemlistasync() , 를 활용하여 의상 아이템 목록을 가져올 수 있습니다 다음 예시는 로컬 플레이어가 소유한 의상을 화면에 표시하고 선택하여 의상을 변경할 수 있도록 하는 방법을 보여줍니다 1단계 의상 목록 ui 생성 먼저, 의상 목록의 썸네일과 이름이 표시될 ui 목록 리소스를 생성합니다 제작해야 할 리소스는 다음과 같습니다 1단계 1 아이템 프리팹 생성 로컬 플레이어가 소유한 의상 목록을 로딩한 후, ui에서 아이템 목록을 생성합니다 아이템 프리팹은 생성되는 각 아이템 목록의 소스 역할을 합니다 아이템 프리팹이 생성되면, 썸네일과 아이템 이름이 ui에 표시됩니다 아이템 프리팹은 다음 요소를 포함합니다 button thumbnail 객체 이 객체는 아이템의 썸네일 이미지를 표시하기 위해 raw image 구성 요소와 button 구성 요소가 등록된 객체입니다 text name 객체 아이템 이름이 표시될 text 구성 요소 객체입니다 1 2단계 캔버스 설정 캔버스는 아이템 프리팹이 생성될 때 표시되는 ui 화면입니다 많은 아이템 목록을 가져올 수 있도록 이 캔버스 안에 스크롤 뷰를 만드는 것이 좋습니다 캔버스 안의 스크롤 뷰 객체는 다음과 같이 설정됩니다 스크롤 뷰 객체는 수직 스크롤만 허용하도록 설정됩니다 콘텐츠 객체는 다음 구성 요소를 설정합니다 그리드 레이아웃 그룹 셀 크기 x 150, y 150 제약 조건 고정 열 수 제약 수 5 2단계 아이템 목록을 로드하고 의상을 변경하는 스크립트 단계 2 1 스크립트 작성하기 zepeto 추가 > typescript로 스크립트 이름을 myitemlist로 변경합니다 아래와 같이 샘플 스크립트를 작성합니다 myitemlist ts import { zepetoscriptbehaviour } from 'zepeto script'; import { shopservice, itemkeyword } from 'zepeto module shop'; import { zepetopropertyflag } from 'zepeto'; import { gameobject, object, recttransform, texture2d, transform, waituntil } from 'unityengine'; import { button, layoutrebuilder, rawimage, text } from 'unityengine ui'; import { spawninfo, zepetoplayers } from 'zepeto character controller'; import { worldservice } from 'zepeto world'; import { item } from 'zepeto module content'; export default class checkmyitemlist extends zepetoscriptbehaviour { public itemprefab gameobject; public itemcanvas transform; // 장면이 시작될 때, 제공된 사용자 id로 플레이어를 생성하고 아이템을 가져와서 표시합니다 start() { // 지정된 사용자 id로 새 플레이어를 생성합니다 zepetoplayers instance createplayerwithuserid(worldservice userid, new spawninfo(), true); // 로컬 플레이어가 추가될 때 트리거되는 onaddedlocalplayer 이벤트에 리스너를 추가합니다 zepetoplayers instance onaddedlocalplayer addlistener(() => { // 아이템을 가져오고 표시하기 위해 cogetmyitem 코루틴을 시작합니다 this startcoroutine(this cogetmyitem()); }); } // 아이템을 가져오고 표시하는 코루틴입니다 cogetmyitem() { // "all" 키워드와 필터 없이 아이템 목록을 요청합니다 var requestitemlist = shopservice getmycontentitemlistasync(itemkeyword all, null); // 요청이 완료될 때까지 기다립니다 yield new waituntil(() => requestitemlist keepwaiting == false); if (requestitemlist responsedata issuccess) { let contentitems item\[] = requestitemlist responsedata items; console log(contentitems length); for (let i = 0; i < contentitems length; ++i) { const property zepetopropertyflag = contentitems\[i] property; // 아이템의 썸네일 텍스처를 요청합니다 var texturereq = contentitems\[i] getthumbnailasync(); yield new waituntil(() => texturereq keepwaiting == false); let thumbnailtexture texture2d = texturereq responsedata texture; // 아이템 프리팹을 인스턴스화하고 속성을 설정합니다 const item = object instantiate(this itemprefab, this itemcanvas) as gameobject; item getcomponentinchildren\<rawimage>() texture = thumbnailtexture; item getcomponentinchildren\<text>() text = contentitems\[i] id; // 클릭 시 의상을 변경하는 아이템 버튼에 클릭 리스너를 추가합니다 item getcomponentinchildren\<button>() onclick addlistener(() => { this setitembutton(contentitems\[i] id); }); } } // ui 요소의 적절한 위치 지정을 보장하기 위해 레이아웃을 강제로 재구성합니다 const rect = this itemcanvas gameobject getcomponent\<recttransform>(); layoutrebuilder forcerebuildlayoutimmediate(rect); } // 제공된 아이템 코드에 따라 로컬 플레이어의 의상을 변경하는 메서드입니다 setitembutton(itemcode string) { // zepetoplayers instance localplayer 속성을 사용하여 로컬 플레이어 인스턴스에 접근하고 의상을 변경합니다 zepetoplayers instance localplayer setcostume(itemcode, () => { // 의상 변경이 완료되면 성공적인 변경을 나타내는 메시지를 로그에 기록합니다 console log(`의상 설정 완료 ${itemcode}`); }); } } 스크립트 설명 시작 메서드에서 새로운 플레이어가 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() \[ 사용자가 보유한 아이템 정보 가져오기 docid\ wrab ty weujrmzqsnnex ] 사용자가 소유한 아이템을 검색할 때, itemkeyword를 사용하여 카테고리별로 검색하고 ui에 목록으로 표시할 수 있습니다 ❗️ 주의 다음에서 검색된 의류 목록은 shopservice getmycontentitemlistasync() 만료된 기간 한정 제품을 포함합니다 따라서 만료된 항목 오류 로그를 호출할 수 있습니다 step 2 2 myitemlist 검사기 설정 1단계에서 생성된 itemprefab을 myitemlist가 적용된 구성 요소의 item prefab에 등록하고, itemcanvas 에 canvas를 등록합니다 3단계 실행 재생 버튼을 눌러 실행하면, 캔버스 ui에 로컬 플레이어가 소유한 아이템 목록이 표시되며, 선택할 때 해당 의상으로 변경되는 것을 볼 수 있습니다 ❗️ 주의 이 의상 착용 api는 로컬 플레이어에게만 적용되며 현재 멀티플레이어 동기화를 지원하지 않습니다 의상 멀티플레이어 동기화는 향후 제공될 예정입니다