1. The Spine Game Object Scene창
최초로 Spine Examples - Getting Started - 1. The Spine Game Object Scene 창을 띄웠을 때 나타나는 창이다.
해당 문서에 따르면, "Spine GameObjects"는 SkeletonAnimation을 보유한 게임 오브젝트를 뜻한다.
Skeleton Animation이란 Spine 컴포넌트로 가장 흔하게 쓰이는 것으로 Skeleton Data Asset을 사용한다.
Skeleton Data Asset이란, Spine icon을 가지고 있는 에셋 파일이며, SkeletonDataAsset은 .json, .png, .atlast.txt 파일을 포함하고 있다. Spine-Unity Documentation링크로 더욱 깊은 공부를 할 수 있다.
이제, Play Mode를 시작하여 해당 Spine-Unity Girl이 작동하는 원리를 살펴보자.
먼저 Spine-Unity Girl의 컴포넌트에 Skeleton Mesh, Mesh Renderer, SkeletonAnimation(script), Spine Blink Player, doi_Material 가 존재한다.
Unity Asset의 Spineunitygirl 파일안에서, Doi.json, Doi(Texture 2D), Doi.atlas, Doit_Atlas (spint Altas Asset), Doi Material, Doi_Skeleton Data(Skeleton Data Asset)이 존재한다.
여기에서 Doi_Skeleton Data(Skeleton Data Asset)을 자세히 살펴보면 다음과 같이 컴포넌트가 붙어있다.
해당 컴포넌트를 먼저 하나씩 뜯어보도록 하자.
해당 SkeletonDataAsset을 생성하는 방법은 다음과 같다.
그전에, SpineAtlas 파일이 존재하지 않다면 아래와 같은 환경을 따라가면 된다.
먼저, Windows - Spine - SpriteAtlas Import 을 선택하면 하단의 새로운 창이 뜬다.
해당창에서 Material을 기준으로 Spine Atlas가 생성된 파일을 넣으면 생성된다.
다시 본론으로 돌아와서, 우리가 주의깊게 살펴보야할 내용은 먼저, SkeletonAnimation이다.
인스턴스화 하는 방법에는 두가지가 있다.
// instantiating a SkeletonAnimation GameObject from a SkeletonDataAsset
SkeletonAnimation instance = SkeletonAnimation.NewSkeletonAnimationGameObject(skeletonDataAsset);
// instantiating a SkeletonGraphic GameObject from a SkeletonDataAsset
SkeletonGraphic instance
= SkeletonGraphic.NewSkeletonGraphicGameObject(skeletonDataAsset, transform, skeletonGraphicMaterial);
위 방식의 인스턴스화 방법 이외에 아래와 같이 인스턴스화 할 수도 있다.
// 사전 가져오기 없이 내보낸 자산에서 인스턴스화
// 1. AtlasAsset을 만듭니다(아틀라스 텍스트 자산과 텍스처, 재료/셰이더 필요).
// 2. SkeletonDataAsset을 생성합니다(json 또는 바이너리 자산 파일 및 AtlasAsset 필요)
SpineAtlasAsset runtimeAtlasAsset
= SpineAtlasAsset.CreateRuntimeInstance(atlasTxt, textures, materialPropertySource, true);
SkeletonDataAsset runtimeSkeletonDataAsset
= SkeletonDataAsset.CreateRuntimeInstance(skeletonJson, runtimeAtlasAsset, true);
// 3. SkeletonAnimation 생성(유효한 SkeletonDataAsset 필요)
SkeletonAnimation instance = SkeletonAnimation.NewSkeletonAnimationGameObject(runtimeSkeletonDataAsset);
해당 API를 사용하면 런타임 시에 내보낸 3가지 에셋에서 직접 GameObject를 SkeltonAnimation 인스턴스화 할 수 있다.
SkeletonAnimation 구성 요소
이 SkeletonAnimation 컴포넌트는 Unity에서 Spine 뼈대를 사용하는 세가지 방법 중 하나이다. 세가지 방법에는 SkeletonAnimation, SkeletonMecanim 및 SkeletonGraphic (UI)가 있다.
뼈대 데이터 설정
뼈대 데이터를 설정하거나 변경하려면
1. SkeletonAnimation GameObject를 선택합니다.
2. Inspector의 속성에 SkeletonData 자산을 할당합니다.(SkeletonData Asset)
Init Skin
- 이 스킨은 시작 시 할당된다. 첨부된 이미지 없이 뼈대만 보이는 경우 스킨을 default 표시하는 대신 다른 스킨으로 전화하는 것이 좋다.
Animation Name
- 재생될 애니메이션의 이름
Loop
- 초기 애니메이션의 루프 설정
Time Scale
- 애니메이션의 재생 속도를 늦추거나 높이도록 시간 척도를 설정할 수 있음
Unscaled Time
- Time.deltaTime 대신 Time.unscaledDeltaTime true에 따라 업데이트가 수행됨. UI 요소에 애니메이션을 적용하는데 유용
Root Motion
- SkeletonGraphic(UI) SkeletonAnimation 구성 요소에 대한 루트 모션은 별도의 SkeletonRootMotion 구성 요소를 통해 제공
SkeletonAnimation 구성 요소 에서 AnimationState는 현재 재생 중이거나 대기열에 있는 모든 애니메이션의 상태를 유지합니다. 매 마다 UpdateAnimationState가 업데이트되어 애니메이션이 시간에 맞춰 앞으로 진행됩니다. 그런 다음 새 프레임이 Skeleton에 새 포즈로 적용됩니다.
애니메이션 설정
애니메이션을 설정하려면 track index, animation name, loop를 통해 제어가 가능하다.
TrackEntry entry = skeletonAnimation.AnimationState.SetAnimation(trackIndex, "walk", true);
// using properties
[SpineAnimation] public string animationProperty = "walk";
...
TrackEntry entry = skeletonAnimation.AnimationState.SetAnimation(trackIndex, animationProperty, true);
// using AnimationReferenceAsset
public AnimationReferenceAsset animationReferenceAsset; // assign a generated AnimationReferenceAsset to this property
...
TrackEntry entry = skeletonAnimation.AnimationState.SetAnimation(trackIndex, animationReferenceAsset, true);
Queueing Animation(track index, animation name, loop, delay)
TrackEntry entry = skeletonAnimation.AnimationState.AddAnimation(trackIndex, "run", true, 2);
해당 사항과 같이 애니메이션을 만들 수 있다.