Windows - Package Manager에서 Animation Rigging 패키지를 검색하고 Install 한다.

 

패키지 설치가 끝났으면 애니메이션 리깅을 설정해서 캐릭터를 구성하는 뼈대를 나타내는 것으로 시작한다.

 

던전 스켈레톤을 누르고 상단에 Animation Rigging - Bone Renderer Setup을 클릭하면 된다.

 

Bone Renderer Setup를 클릭하면 던전 스켈레톤에 Bone Renderer라는 컴포넌트가 추가되며 동시에 Scene 뷰에 던전 스켈레톤의 뼈대가 표시되고 마우스로 쉽게 클릭도 가능해진다!

 

Bone Renderer는 던전 스켈레톤의 릭을 구성하는 뼈대 오브젝트들의 트랜스폼을 참조하고 있으며 뼈대의 크기나 색을 조정할 수도 있다.

 

여기까지 됐다면 Rig을 만들어야 한다. 참고로 애니메이션 리깅은 별도의 Rig을 만듦으로써 동작한다.

던전 스켈레톤을 클릭하고 상단의 Animation Rigging - Rig Setup을 클릭하면 두 가지 변화가 생긴다.

  1. 던전 스켈레톤에 Rig Layer를 가진 Rig Builer 컴포넌트가 추가된다.
  2. 던전 스켈레톤의 자식으로 Rig 컴포넌트를 가진 한 오브젝트가 생긴다.

Rig 1 오브젝트에 제약조건(Constraint)를 추가함으로써 애니메이션 리깅이 가능해진다.

Rig 1에 Empty 오브젝트를 하나 추가해서 이름을 HeadAim으로 변경하고 HeadAim에 Multi-Aim Constraint 컴포넌트를 추가해 보자. 

Multi-Aim Constraint에 몇 가지 정보를 넘겨줘야 한다.

  1. Constrained Object 제약조건이 걸릴 뼈대를 넘겨주면 되는데, 본 실습에선 머리에 애니메이션 리깅을 적용하고 싶으니 Constrained Object에 던전 스켈레톤의 Head 뼈대를 넘겨주고 Aim Axis를 Y로 변경해 주자.
  2. Source Object는 Constrained Object와 상호작용할 오브젝트로 하이라키뷰의 Fox를 선택해서 Head가 보이게 펼쳐준후 Head를 끌어 연결해준다. Aim Axis는 Y로 변경해 준다.

추가로 Rig 컴포넌트에 weight가 있다. 이는 타겟이 캐릭터에게 영향을 주는 정도로 weight가 줄어들수록 target과 상호작용은 약해진다. 

 

3. 머리만 움직이면 어색하니 흉부도 함께 움직이도록 Rig1에 ChestAim 빈오브젝트에 Multi-airm Constraint를 추가하고 Spine1을 연결해준다. Source는 똑같이 Fox의Head를 연결해주고 머리와 흉부에 weight 값을 다르게 줘서 자연스러운 애니메이션을 연출해 보자. Aim Axis는 Y로 변경해 준다. Min Limit과 Max Limit을 각각 -100, 100으로 지정하면 멋진 결과물이 탄생한다.

 

해보면 흉부도 함께 움직인다. Fox가 움직여서  테스트가 어려우면 Fox의 스크립트를 언체크해도 된다.

 

같은 방법으로 Fox도  Animation Rigging - Bone Renderer Setup후 Animation Rigging - Rig Setup을 클릭 Rig1에 HeadAim을 추가하고 Multi-Aim Constraint 컴포넌트를 추가후 Constrained Object를 Fox Head로 하고

Source를 +를 누르고 Skeleton 다리를 추가하면 Fox 가 고개를 움직인다. Skeleton Head는 높이가 안 맞는다  Aim Axis Y t설정및 리미트 설정을 꼭한다. 

 

 

https://assetstore.unity.com/packages/3d/characters/creatures/dungeon-skeletons-demo-71087

 

Dungeon Skeletons Demo | 3D 생물 | Unity Asset Store

Elevate your workflow with the Dungeon Skeletons Demo asset from Polygon Blacksmith. Find this & other 생물 options on the Unity Asset Store.

assetstore.unity.com

Asset Store에서 Dungeon Skeletons를 다운 받아 인포트해서 하이라키에 끌어다 놓는다.  프리팹이 없기때문에 Models폴더에서 끌어다 놓는다

애니메이터가 연결 안되어 있기 때문에 Fox와 동일한 방법으로 만든다.

프로젝트뷰에서 우클릭 [Create]-[Animator Controller] 를 만든후 이름을 NewFoxAnim으로 한다.

더블클릭해서 Animator를 연다.

다음 폴더에서 idel을 끌어다 놓는다

Walk와 attack도 끌어다 놓고 transition을 연결한다.

애니메이션이 walk 밖에 없어서 브랜드트리는 안 만드는 것이다.

파라미터는 Trigger attack, bool move만 만들어준다.

idel>walk 트랜지션속성 Has Exit Time 언체크 Condition>move>false

walk>idel 트랜지션속성 Has Exit Time 언체크 Condition>move>false

 

완성된 SkeletonAnim을 DungeonSkeletonDemo  인스펙터 Animator컴포넌트의 Controller속성과 연결해준다.

SkeletonCtrl.cs를 다음과 같이 만들고 DungeonSkeletonDemo 에 연결해 준다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SkeletonCtrl : MonoBehaviour {
    // Start is called before the first frame update
    private Animator anim;  // 애니메이터 컴포넌트를 담을 변수
    private bool isMove;  // Move State 체크용 파라메터
    void Start() {
        anim = GetComponent<Animator>();  //애니메이터 컴포넌트를 받아온다
    }

    // Update is called once per frame
    void Update() {
        float moveSpeed = 3.0f;
        float _x = Input.GetAxisRaw("Horizontal");  //키임력을 받아
        float _z = Input.GetAxisRaw("Vertical");
        Vector3 direction = new Vector3(_x, 0, _z);  //벡터를 만들고
        isMove = false;

        if (direction != Vector3.zero) {
            isMove = true;  //움직임이 있으면 Move State로 간다
            //큐브를 이동시켜주고
            this.transform.Translate(direction.normalized * moveSpeed * Time.deltaTime);
        }
        //애니메이터 파라메터를 설정해준다
        //애니메이터 파라메터를 설정해준다
        anim.SetBool("move", isMove);
    }
}

유니티를 실행해서 WASD를 눌러보면 Fox와 DungeonSkeleton이 같이 움직인다.

3D 프로젝트를 하나 만든다.

3D Object Plane을 하나 만들고 Scale을 5로 한다.

Assetstore에서 Toon Fox를 다운받고 import한다. 하이라키에 끌어다 놓는다.

https://assetstore.unity.com/packages/3d/characters/animals/toon-fox-183005

 

Toon Fox | 3D 동물 | Unity Asset Store

Elevate your workflow with the Toon Fox asset from Pxltiger. Find this & other 동물 options on the Unity Asset Store.

assetstore.unity.com

기본적으로 애니메이터가 설정되어 있어 플레이하면 모든 애니메이션을 돌아가면서 보여준다.

프로젝트뷰에서 우클릭 [Create]-[Animator Controller] 를 만든후 이름을 NewFoxAnim으로 한다.

더블클릭해서 Animator를 연다.

Fox/animations폴더에서 Fox_Idle Animation을 끌어다 놓는다.

우클릭후 New Blend Tree를 만들고 이름을 Move로 만든다

Idle과 Transition을 만들어 준다.

Idle과 Move 사이 트랜지션의 컨디션을 다음과 같이 설정하고

양쪽다 Has Exit Time은 언체크하고 Transition Duration은 0.1로 한다

Parameter

s뷰에서 float incX, float incZ, bool move를 만든다.

Move State를 클릭한다.

가운데 Blend Tree를 선택하면 인스펙터가 다음 같이 바뀌고 Blend Type을 2D Simple Directional로 바꾼다.

Parameters를 다음과 같이 바꿔준다.

그다음과 +를 눌러 Add Motion Field를 4개 넣어주고

 

같은 창이 아래 모션을 애니메이션과 연결해준후 PosX PosY값을 설정한다.

BlendTree.cs를 다음과 같이 만들고 Fox에 연결해 준다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BlendTree : MonoBehaviour {
    // Start is called before the first frame update
    private Animator anim;  // 애니메이터 컴포넌트를 담을 변수
    private bool isMove;  // Move State 체크용 파라메터
    void Start() {
        anim = GetComponent<Animator>();  //애니메이터 컴포넌트를 받아온다
    }

    // Update is called once per frame
    void Update() {
        float moveSpeed = 3.0f;
        float _x = Input.GetAxisRaw("Horizontal");  //키임력을 받아
        float _z = Input.GetAxisRaw("Vertical");
        Vector3 direction = new Vector3(_x, 0, _z);  //벡터를 만들고
        isMove = false;

        if (direction != Vector3.zero) {
            isMove = true;  //움직임이 있으면 Move State로 간다
            //큐브를 이동시켜주고
            this.transform.Translate(direction.normalized * moveSpeed * Time.deltaTime);
        }
        //애니메이터 파라메터를 설정해준다
        //애니메이터 파라메터를 설정해준다
        anim.SetBool("move", isMove);
        anim.SetFloat("incX", direction.x);
        anim.SetFloat("incZ", direction.z);
    }
}

 

+ Recent posts