本帖最后由 啊啵呲嘚 于 2023-12-12 14:14 编辑
区别:
attchToSlot是直接把模型绑定到指定插槽上,且只能一个一个的绑定,绑定的模型不会出现在角色形象数据中,需要自己维护。
setDescription是通过角色形象数据进行绑定,绑定的模型由角色形象数据决定,而且不只可以设置插槽数据,同时可以设置其他的外观数据,
当角色形象数据里只包含插槽数据时直接传入角色形象数据id即可,
this.character.setDescription("F102BFAF43ACED263E578F9C4B00F791")
如果角色形象数据里包含有其他的外观数据,则需要传入角色形象数据id数组。
this.character.setDescription(["F102BFAF43ACED263E578F9C4B00F791"])
也可以获取到其他玩家的角色外观数据进行设置
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)
|