using Spine; using Spine.Unity; using Spine.Unity.AttachmentTools; using System.Linq; using UnityEngine; public class SpineSkinTest : MonoBehaviour { [SerializeField] Material charMat; SkeletonAnimation skeletonAnimation; Skeleton skeleton => skeletonAnimation.Skeleton; int totalCostumeCount; int totalWeaponCount; int skinIndex = 1; int weaponSkinIndex = 1; private void Awake() { skeletonAnimation = GetComponent(); totalCostumeCount = skeleton.Data.Skins.Count((s) => s.Name.Contains("Costume/")); totalWeaponCount = skeleton.Data.Skins.Count((s) => s.Name.Contains("Weapon/")); } private void Start() { SetCustomSkin(); } [ContextMenu("Change Costume")] private void ChangeCostume() { if(totalCostumeCount == 0) return; skinIndex = (skinIndex + 1) % (totalCostumeCount + 1); SetCustomSkin(); } [ContextMenu("Change Weapon Skin")] private void ChangeWeaponSkin() { if(totalWeaponCount == 0) return; weaponSkinIndex = (weaponSkinIndex + 1) % (totalWeaponCount + 1); SetCustomSkin(); } private void SetCustomSkin() { var newSkin = new Skin("custom"); newSkin.AddSkin(skeleton.Data.DefaultSkin); if(skeleton.Data.TryGetSkin($"Costume/{skinIndex}", out Skin costumeSkin)) newSkin.AddSkin(costumeSkin); if(skeleton.Data.TryGetSkin($"Weapon/{weaponSkinIndex}", out Skin weaponSkin)) newSkin.AddSkin(weaponSkin); var repackedSkin = newSkin.GetRepackedSkin("custom", charMat, out var newMat, out var newTex); skeleton.SetSkin(repackedSkin); skeleton.SetSlotsToSetupPose(); skeletonAnimation.Update(0); AtlasUtilities.ClearCache(); } }