Search
Duplicate

Unity/ Spine Skin

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을 하면 잘 되므로 그렇게 한다.