Attachment와 Skin
•
Slot은 캐릭터 의상이 들어갈 부위를 의미한다. 머리, 몸통, 팔, 다리, 모자 등등
•
Attachment는 하나의 텍스쳐를 의미한다. Attachment는 각 Slot에 지정된다.
•
Skin은 Attachment들의 모음이다. 캐릭터 의상 전체 Set를 의미한다.
Attachment 바꾸기
skeletonAnimation = transform.GetComponent<SkeletonAnimation>();
skeletonAnimation.skeleton.SetAttachment(SlotName, AttachName);
C#
복사
•
Attachment를 바꾸려면 Attachment의 이름과 Attachment가 들어갈 Slot의 이름이 필요하다.
•
SkeletonAnimation 아래의 skeleton 아래에 SetAttachment()를 사용하면 된다.
Skin 바꾸기
skeletonAnimation = transform.GetComponent<SkeletonAnimation>();
skeletonAnimation.skeleton.SetSkin(SkinName);
C#
복사
•
Skin은 의상 전체 –Attachment 모음– 이기 때문에 만들어진 Skin을 그대로 사용하면 된다.
•
SkeletonAnimation 아래의 skeleton 아래에 SetSkin()를 사용하면 된다.
Skin에서 특정 부위만 바꾸기
•
캐릭터 커스터마이징이 없는 게임이라면 SetSkin을 이용해서 전체 Skin을 바꾸면 되지만, 캐릭터 커스터마이징을 한다면 SetSkin을 이용할 수 없다. 바지만 갈아입히려는데 바지 외의 것들이 한번에 날아가기 때문이다.
•
이럴 때는 기존에 입고 있는 스킨에서 특정 Attachment만 바꿔야 되는데, 이게 Spine-Unity 기본에는 없다. 어느 훌륭한 개인 사용자가 만든 방식이 있으니 그것을 이용한다.
•
기본 개념은 기존에 입고 있는 옷들과 새로 바꿀 부위를 이용해서 새로운 Skin을 만든 후에 그것을 입히는 식으로 진행된다.
1. Skin.cs 클래스 수정하기
public void AddFromSkin(Skin other)
{
foreach (var a in other.attachments)
{
attachments[a.Key] = a.Value;
}
}
C#
복사
•
spine의 Skin.cs 클래스에 위의 메서드를 추가한다.
2. Combined Skin 만들기
public void SetEquip(List<string> EquipList)
{
skeletonAnimation = transform.GetComponent<SkeletonAnimation>();
Skin combined = new Skin("combined");
foreach (var equip in EquipList)
{
Skin skin = skeletonAnimation.skeleton.data.FindSkin(EquipList[i]);
if (skin != null)
{
combined.AddFromSkin(skin);
}
}
ani.skeleton.Skin = null;
ani.skeleton.SetSkin(combined);
}
C#
복사
•
Skin.cs에 AddFromSkin 메서드를 추가했다면 다음과 같이 옷 갈아입기를 한다.
1.
combined 이라는 이름으로 새로운 Skin을 만든다.
2.
새로 입힐 코스튬 리스트를 돌면서 skeletonAnimation.skeleton.data의 FindSkin을 통해 Skin 정보를 가져온다.
3.
가져온 스킨 정보를 combined 스킨에 AddFromSkin()한다.
•
최종적으로 combine 한 Skin을 적용한다.
◦
정확한 이유는 모르겠는데 여기서 바로 SetSkin을 하면 스킨이 제대로 입혀지지 않는다. Skin에 null을 대입한 후에 SetSkin을 하면 잘 되므로 그렇게 한다.