I have a spine character. You can see that green character in attachment is the default character. Now I want to replace some of its green images with blue images to make it a totally different character.
I want to download this images over the internet and then apply it to the character runtime. Because of this reason we can not use skins.
Currently, Character has green feet. I want to replace it with the blue foot image. Size of both the image is exactly same. But when I replace the blue foot, it cut from the side. You can see that in the third image.
here's my code for it,
private string[] slotKeys = { "head", "head_02", "foot", "foot2", "eye", "eye2" };
//[SerializeField] [SpineAttachment(currentSkinOnly = true, slotField = "slotKey")]
private string[] attachments = { "head", "head_02", "foot", "foot", "eye", "eye" };
private bool[] copyFromPrevious = { false, false, false, true, false, true };
private string[] imagesNames = { "blockhead_parts_blue_headA.png", "blockhead_parts_blue_headB.png", "blockhead_parts_blue_foot.png", "blockhead_parts_blue_foot.png", "blockhead_parts_blue_eyeball.png", "blockhead_parts_blue_eyeball.png" };
private Skin[] skins;
IEnumerator Start()
{
skeletonAnimation = GetComponent<SkeletonAnimation>();
skeletonData = skeletonAnimation.skeleton.Data;
m_SourceMaterial = GetComponent<MeshRenderer>().material;
skins = new Skin[slotKeys.Length];
Skin l_TemplateSkin = skeletonData.FindSkin("default");
yield return null;
Attachment l_PreviousAttachment = null;
for (int i = 0; i < slotKeys.Length; i++)
{
string imageName = imagesNames[i];
string slotKey = slotKeys[i];
string attachment = attachments[i];
m_Sprite = LoadImage(imageName);
Skin l_NewSkin = new Skin("test" + i.ToString());
int l_SlotIndex = skeletonData.FindSlotIndex(slotKey);
Attachment l_AttachmentTemplate = l_TemplateSkin.GetAttachment(l_SlotIndex, attachment);
Attachment l_NewAttachment = null;
if (copyFromPrevious[i])
{
l_NewAttachment = l_AttachmentTemplate;
l_NewAttachment.SetRegion(l_PreviousAttachment.GetRegion());
}
else {
l_NewAttachment = l_AttachmentTemplate.GetRemappedClone(m_Sprite, m_SourceMaterial);
l_PreviousAttachment = l_NewAttachment;
}
l_NewSkin.SetAttachment(l_SlotIndex, attachment, l_NewAttachment);
skins[i] = l_NewSkin;
}
Skin repackedSkin = new Skin("Repacked Skin");
foreach (Skin skin in skeletonData.Skins)
{
repackedSkin.AddSkin(skin);
}
for (int i = 0; i < skins.Length; i++)
{
repackedSkin.AddSkin(skins[i]);
}
Material runtimeMaterial;
Texture2D runtimeAtlas;
repackedSkin = repackedSkin.GetRepackedSkin("Repacked Skin", m_SourceMaterial, out runtimeMaterial, out runtimeAtlas);
skeletonAnimation.Skeleton.Skin = repackedSkin;
skeletonAnimation.Skeleton.SetSlotsToSetupPose();
}