[开发者心得] attachToSlot和setDescription的区别,这两种方法如何卸载插槽内物体

[复制链接]
721 |0
啊啵呲嘚 发表于 2023-12-12 14:15:15 | 显示全部楼层 |阅读模式
本帖最后由 啊啵呲嘚 于 2023-12-12 14:14 编辑

区别:
attchToSlot是直接把模型绑定到指定插槽上,且只能一个一个的绑定,绑定的模型不会出现在角色形象数据中,需要自己维护。

setDescription是通过角色形象数据进行绑定,绑定的模型由角色形象数据决定,而且不只可以设置插槽数据,同时可以设置其他的外观数据,
当角色形象数据里只包含插槽数据时直接传入角色形象数据id即可
this.character.setDescription("F102BFAF43ACED263E578F9C4B00F791")

如果角色形象数据里包含有其他的外观数据,则需要传入角色形象数据id数组
this.character.setDescription(["F102BFAF43ACED263E578F9C4B00F791"])


image.png

也可以获取到其他玩家的角色外观数据进行设置
const description = this.character.description
    this.character.setDescription(description)


卸载挂件:
attachToSlot绑定的模型可以通过detachFromFlot(go)来卸载指定的模型(go),也可以通过detachAllFromFlot来卸载所有的插槽上的模型,卸载后的模型不会被销毁,需要自行销毁

通过setDescription绑定的模型也可用通过attachToSlot的卸载方式卸载模型,但是模型的数据依旧会保存在角色的形象数据里。
所以正确的卸载方式是:
卸载所有的插槽上的模型
const slot = this.character.description.advance.slotAndDecoration.slot
      for (let index = 0; index < slot.length; index++) {
        const element = slot[index];
        element.decoration.clear(true) // ture为销毁,false为不销毁
      }


卸载某一个插槽上的所有模型
const slot = this.character.description.advance.slotAndDecoration.slot
      slot[HumanoidSlotType.Hair].decoration.clear(true) // slot的下标对应角色的插槽


卸载某一个插槽上的指定模型
const slot = this.character.description.advance.slotAndDecoration.slot
      const go = slot[HumanoidSlotType.Hair].decoration[0]
      slot[HumanoidSlotType.Hair].decoration.delete(go.attachmentGameObject,true)

卸载时可以选择是否销毁对象

拓展
还有一个绑定模型的方式,向角色插槽数据中添加模型,可以传入模型的资源id或者是模型对象和挂件transform信息(相对插槽),
const slot = this.character.description.advance.slotAndDecoration.slot
      slot[HumanoidSlotType.Hair].decoration.add("60858", new Transform(new Vector(0, 0, 0), Rotation.zero, Vector.one))

这个只能在客户端操作,然后选择是否调用syncDescription,同步给其他客户端
this.character.syncDescription(true,true)









回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表