Unity/ Spine Skin

Attachment와 Skin

  • Slot은 캐릭터 의상이 들어갈 부위를 의미한다. 머리, 몸통, 팔, 다리, 모자 등등
  • Attachment는 하나의 텍스쳐를 의미한다. Attachment는 각 Slot에 지정된다.
  • Skin은 Attachment들의 모음이다. 캐릭터 의상 전체 Set를 의미한다.

Attachment 바꾸기

skeletonAnimation = transform.GetComponent<SkeletonAnimation>();
skeletonAnimation.skeleton.SetAttachment(SlotName, AttachName);
  • Attachment를 바꾸려면 Attachment의 이름과 Attachment가 들어갈 Slot의 이름이 필요하다.
  • SkeletonAnimation 아래의 skeleton 아래에 SetAttachment()를 사용하면 된다.

Skin 바꾸기

skeletonAnimation = transform.GetComponent<SkeletonAnimation>();
skeletonAnimation.skeleton.SetSkin(SkinName);
  • 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;
    }
}
  • 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);
}
  • Skin.cs에 AddFromSkin 메서드를 추가했다면 다음과 같이 옷 갈아입기를 한다.
    1. combined 이라는 이름으로 새로운 Skin을 만든다.
    2. 새로 입힐 코스튬 리스트를 돌면서 skeletonAnimation.skeleton.data의 FindSkin을 통해 Skin 정보를 가져온다.
    3. 가져온 스킨 정보를 combined 스킨에 AddFromSkin()한다.
  • 최종적으로 combine 한 Skin을 적용한다.
    • 정확한 이유는 모르겠는데 여기서 바로 SetSkin을 하면 스킨이 제대로 입혀지지 않는다. Skin에 null을 대입한 후에 SetSkin을 하면 잘 되므로 그렇게 한다.
It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

The author

지성을 추구하는 디자이너/ suyeongpark@abyne.com

댓글 남기기