AtlasRegionAttacher.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using UnityEngine;
  2. using System.Collections;
  3. using Spine;
  4. public class AtlasRegionAttacher : MonoBehaviour
  5. {
  6. [System.Serializable]
  7. public class SlotRegionPair
  8. {
  9. [SpineSlot]
  10. public string slot;
  11. [SpineAtlasRegion]
  12. public string region;
  13. }
  14. public AtlasAsset atlasAsset;
  15. public SlotRegionPair[] attachments;
  16. Atlas atlas;
  17. void Awake()
  18. {
  19. GetComponent<SkeletonRenderer>().OnReset += Apply;
  20. }
  21. void Apply(SkeletonRenderer skeletonRenderer)
  22. {
  23. atlas = atlasAsset.GetAtlas();
  24. AtlasAttachmentLoader loader = new AtlasAttachmentLoader(atlas);
  25. float scaleMultiplier = skeletonRenderer.skeletonDataAsset.scale;
  26. var enumerator = attachments.GetEnumerator();
  27. while (enumerator.MoveNext())
  28. {
  29. var entry = (SlotRegionPair)enumerator.Current;
  30. var regionAttachment = loader.NewRegionAttachment(null, entry.region, entry.region);
  31. regionAttachment.Width = regionAttachment.RegionOriginalWidth * scaleMultiplier;
  32. regionAttachment.Height = regionAttachment.RegionOriginalHeight * scaleMultiplier;
  33. regionAttachment.SetColor(new Color(1, 1, 1, 1));
  34. regionAttachment.UpdateOffset();
  35. var slot = skeletonRenderer.skeleton.FindSlot(entry.slot);
  36. slot.Attachment = regionAttachment;
  37. }
  38. }
  39. }