/** * 更换骨架皮肤。 * @param armature 骨架。 * @param skin 皮肤数据。 * @param exclude 不需要更新的插槽。 * @see dragonBones.Armature * @see dragonBones.SkinData * @version DragonBones 5.1 * @language zh_CN */ public void ChangeSkin(Armature armature, SkinData skin, List <string> exclude = null) { foreach (var slot in armature.GetSlots()) { if (exclude != null && exclude.Contains(slot.name)) { continue; } var displays = skin.GetDisplays(slot.name); if (displays == null) { continue; } var displayCount = displays.Count; var displayList = slot.displayList; // Copy. displayList.ResizeList(displayCount); // Modify displayList length. for (int i = 0, l = displayCount; i < l; ++i) { var displayData = displays[i]; if (displayData != null) { displayList[i] = this._GetSlotDisplay(null, displayData, null, slot); } else { displayList[i] = null; } } slot.rawDisplayDatas = displays; slot.displayList = displayList; } }
/// <summary> /// - Share specific skin data with specific armature. /// </summary> /// <param name="armature">- The armature.</param> /// <param name="skin">- The skin data.</param> /// <param name="isOverride">- Whether it completely override the original skin. (Default: false)</param> /// <param name="exclude">- A list of slot names that do not need to be replace.</param> /// <example> /// TypeScript style, for reference only. /// <pre> /// let armatureA = factory.buildArmature("armatureA", "dragonBonesA"); /// let armatureDataB = factory.getArmatureData("armatureB", "dragonBonesB"); /// if (armatureDataB && armatureDataB.defaultSkin) { /// factory.replaceSkin(armatureA, armatureDataB.defaultSkin, false, ["arm_l", "weapon_l"]); /// } /// </pre> /// </example> /// <see cref="DragonBones.Armature"/> /// <see cref="DragonBones.SkinData"/> /// <version>DragonBones 5.6</version> /// <language>en_US</language> /// <summary> /// - 将特定的皮肤数据共享给特定的骨架使用。 /// </summary> /// <param name="armature">- 骨架。</param> /// <param name="skin">- 皮肤数据。</param> /// <param name="isOverride">- 是否完全覆盖原来的皮肤。 (默认: false)</param> /// <param name="exclude">- 不需要被替换的插槽名称列表。</param> /// <example> /// TypeScript 风格,仅供参考。 /// <pre> /// let armatureA = factory.buildArmature("armatureA", "dragonBonesA"); /// let armatureDataB = factory.getArmatureData("armatureB", "dragonBonesB"); /// if (armatureDataB && armatureDataB.defaultSkin) { /// factory.replaceSkin(armatureA, armatureDataB.defaultSkin, false, ["arm_l", "weapon_l"]); /// } /// </pre> /// </example> /// <see cref="DragonBones.Armature"/> /// <see cref="DragonBones.SkinData"/> /// <version>DragonBones 5.6</version> /// <language>zh_CN</language> public bool ReplaceSkin(Armature armature, SkinData skin, bool isOverride = false, List <string> exclude = null) { var success = false; var defaultSkin = skin.parent.defaultSkin; foreach (var slot in armature.GetSlots()) { if (exclude != null && exclude.Contains(slot.name)) { continue; } var displays = skin.GetDisplays(slot.name); if (displays == null) { if (defaultSkin != null && skin != defaultSkin) { displays = defaultSkin.GetDisplays(slot.name); } if (displays == null) { if (isOverride) { slot.rawDisplayDatas = null; slot.displayList.Clear(); // } continue; } } var displayCount = displays.Count; var displayList = slot.displayList; // Copy. displayList.ResizeList(displayCount); // Modify displayList length. for (int i = 0, l = displayCount; i < l; ++i) { var displayData = displays[i]; if (displayData != null) { displayList[i] = this._GetSlotDisplay(null, displayData, null, slot); } else { displayList[i] = null; } } success = true; slot.rawDisplayDatas = displays; slot.displayList = displayList; } return(success); }