创造你的世界
玩家及角色:进阶

更换本地玩家服装

14min
您可以将本地玩家的服装更改为您拥有的服装。 必须安装 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 属性访问本地玩家实例,并使用提供的物品代码更改服装。一旦服装更改完成,将记录一条 设置服装完成 的消息,表示更改成功。 📘 请参考模特指南以了解如何检查物品 id。 \[ zepeto 模型 docid\ ob aqkdmorwhqiivphwpu ] 2\) 如果你按下 \[▶︎(播放)] 按钮运行它,你可以看到本地玩家被创建并根据输入的物品代码更改服装。 更换服装前(左),更换服装后(右) 如果物品是定期产品,将在检查是否过期后穿戴。对于已过期的物品,将调用一个错误日志,称为 过期物品 。 如果物品是 zem 付费产品,将在检查是否被本地玩家拥有后穿戴。对于未拥有的物品,将调用一个错误日志,称为 没有 itemcode 。 加载物品列表并更换服装的示例。 你可以通过利用 getmyitemlistasync() , 来检索服装物品的列表,该方法提供有关用户拥有的物品的信息。 以下示例演示如何在屏幕上显示本地玩家拥有的服装,并使他们能够选择和更换服装。 步骤 1 创建服装列表 ui 首先,创建一个 ui 列表资源,其中将显示服装列表的缩略图和名称。需要制作的资源包括: 步骤 1 1 创建物品预制件 在加载本地玩家拥有的服装列表后,我们在 ui 中创建物品列表。物品预制件作为每个正在创建的物品列表的来源。 当物品预制件被创建时,缩略图和物品名称会显示在用户界面中。 物品预制件包含以下元素。 button thumbnail 对象:这是一个注册了原始图像组件和按钮组件的对象,用于显示物品的缩略图。 text name 对象:一个文本组件对象,其中将显示物品名称。 步骤 1 2 设置画布 画布是创建物品预制件时显示的用户界面屏幕。建议在此画布内创建一个滚动视图,以便可以检索大量物品列表。 画布内的滚动视图对象设置如下。 滚动视图对象设置为仅允许垂直滚动。 内容对象设置以下组件: 网格布局组: 单元格大小: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}`); }); } } 脚本描述 在 start 方法中,使用 zepetoplayers instance createplayerwithuserid() 创建一个新玩家, cogetmyitem() 协程在本地玩家被添加时执行。 该 cogetmyitem() 协程使用 shopservice getmycontentitemlistasync() 来检索玩家拥有的物品列表。 通过 itemkeyword all 请求所有类别中的所有物品列表。使用 yield new waituntil(() => requestitemlist keepwaiting == false) 等待请求完成。 如果请求成功, requestitemlist responsedata issuccess ,遍历 contentitems 的列表,并使用 getthumbnailasync() 获取每个物品的缩略图。 为每个物品创建一个 ui 元素,使用提供的 itemprefab,并设置缩略图和 id。为每个物品创建一个按钮,并设置为调用 setitembutton() ,将物品的 id 作为参数传递。 当与物品关联的按钮被点击时,调用 setitembutton() 方法。 使用 zepetoplayers instance localplayer setcostume() 将所选物品应用为玩家的角色服装。 当服装成功更改时,显示一条日志消息,内容为 设置服装完成 ,并显示物品代码。 📘 提示 请参考以下指南,了解如何通过 shopservice getmycontentitemlistasync() \[ 获取用户所拥有物品的信息 docid\ fsz5yuf7eeprayikik6mq ] 在搜索用户拥有的物品时,您可以使用 itemkeyword 按类别搜索,并在 ui 上以列表形式显示它们。 ❗️ 注意 通过 shopservice getmycontentitemlistasync() 获取的衣物列表包含过期的限时产品。因此 过期项目 错误日志可以被调用。 步骤 2 2 设置 myitemlist 检查器 在应用 myitemlist 的组件中注册在步骤 1 中创建的 itemprefab,并在 itemcanvas 中注册 canvas。 步骤 3 运行 如果您按下播放按钮运行它,画布用户界面将显示本地玩家拥有的物品列表,您可以看到当选择时物品会更改为相应的服装。 ❗️ 注意 此服装穿戴 api 仅适用于本地玩家,目前不支持多人同步。 未来将提供服装多人同步功能。