Unity Chapter 9-2. 애니메이션 : 트랜지션, 블랜드 트리, 루트 모션, 아바타

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!


Chapter 9. 유니티 애니메이션

Asstes Store에서 “Unity-Chan!”을 Import 해주었다.


🔔 트랜지션

Has Exit Time

  • Has Exit Time이 체크되면 애니메이터의 종료되는 시점이 있다는 얘기 (Settings - Exit Time)
    • 트랜지션 조건이 맞다고 하더라도 Exit Time이 지난 후에 조건에 맞는 다른 트랜지션을 발동한다.
    • 빠릿빠릿하게 움직이게 하고 싶다면 체크 해제하는게 좋다.
      • 그러나 조건이 아예 없는 트랜지션이라면 상태가 끝나면 끝난체로 가만히 있게 되니 반드시 Has Exit Time이 체크가 되어 있어야 한다.
        • 조건도 없고 종료시점도 없으니 다음 애니메이션으로 넘어가지 않게 되므로.

Fixed Duration

  • : Setting 값들이 초 단위
    • 0.25는 0.25초가 됨
  • : Setting 값들이 % 단위
    • 0.25는 25%가 됨

Transition Duration

  • 두 애니메이션을 섞어서 스무스하게 디졸브 해주는 시간
    • 값이 크면 클수록 느릿느릿함

Transition Offset

  • 트랜지션이 일어나는 시간을 좀 더 뒤로 미룬다.
    • 값이 크면 클수록 느릿느릿함


🔔 블랜드 트리

FSM에 의해 한번에 한 애니메이션만 실행할 수 있으므로 두 애니메이션을 동시에 실행하고 싶다면 두 애니메이션을 적절히 블렌딩해서 섞은 새로운 상태를 만들어야 한다. 수평방향키와 수직방향키를 동시에 누르면 블렌딩되어 대각선으로 가게끔!

Blend Tree에서는 여러개의 애니메이션을 파라미터를 섞어서 표현한 State이다.

  • 파라미터 하나 더 추가
    • float “Horizontal”
  • 블렌딩 트리 생성하기
    • 상태도 창에서 우클 - Create State - From New Blend Tree
    • 만들어진 블렌드 트리의 이름을 Movement로 바꿔주었다.
    • 기존에 있던 Idle을 지우고 얘를 디폴트 상태로 설정해주었다. (Set as Layer Default State)

5가지 상태를 섞은 블렌딩 트리

Speed, Horizontal 파라미터 값을 적절히 섞어 이 블렌드 트리 상태 하나 가지고 앞, 뒤, 왼, 오, 정지 이렇게 5가지 상태를 표현할 것이다.

  • Movement 블렌딩 트리 더블클릭 해준 후
    • 다시 한번 더 Movement 클릭하고 인스펙터 창에서
      • 1D에서 2D Simple Directional로 바꿔주기
        • ‘2D Simple Directional’보단 ‘2D Freeform Directional’이 더 보간이 잘 되고 ‘2D Freeform Directional’ 보단 ‘2D Freeform Cartesian’이 더 보간이 잘되는 식이다.
      • 2D 👉 x 는 Horizontal가 되고, y 는 Speed가 되도록 Parameters를 설정해준다.

image

image

  • 위와 같이 정지, 오른쪽, 왼쪽, 앞, 뒤 이렇게 5가지 애니메이션 클립을 Motion에 붙여준 후 PosX, PosY를 지정해준다.
  • 현재 PosX는 Horizontal값이 되고, PosY는 Speed 값이 된다.
  • 🔴 빨간색 점은 현재 섞인 정도를 뜻한다.
    • 예를 들어
      • Horizontal 값이 -1에 가까울수록, Speed값이 1에 가까울수록 (왼쪽 + 앞쪽) 대각선으로 가게될 것

image

  • Jump -> Movement 트랜지션을 이어주었다.
    • Jump 끝나면 movement 상태로 돌아와야 해서.

📜PlayerController.cs

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

public class PlayerController : MonoBehaviour
{
    public Animator anim;
    
    void Update()
    {
        if(Input.GetButtonDown("Jump"))
        {
            anim.SetTrigger("Jump");
        }

        float verticalInput = Input.GetAxis("Vertical");
        float horizontalInput = Input.GetAxis("Horizontal");

        anim.SetFloat("Speed", verticalInput);
        anim.SetFloat("Horizontal", horizontalInput);
    }
}
  • 가로방향 입력 처리를 추가해주었다.


🔔 루트 모션 + 아바타

image

Apply Root motion

  • Animator 컴포넌트에서 Apply Root Motion
    • : 애니메이션에 의해서 애니메이션 컴포넌트가 붙어있는 오브젝트의 실제 좌표값이 변경된다.
      • 앞으로 가는 애니메이션이 적용된다면 오브젝트 좌표도 갱신된다.
    • : 코드에 의해서 오브젝트 실제 좌표값을 제어하려 한다면 이렇게 해제해야한다.
      • 이 강의에서는 해제한 채로 진행할 것이다.

Avatar

Avatar : 보편적인 3D 모델을 받아 들일 수 있도록 만들어진 뼈대

  • Animator 컴포넌트에서 Avatar
    • 현재 여기에 붙어있는 Avatar의 Type은 Humanoid Type이다.
      • 즉, Humanoid Type타입의 아바타라면 어떤 3D 모델이든 받아들이 수 있는 인터페이스 같은 것이다.
      • 꼭 unitychanAvatar가 아니더라도 에셋 스토어나 다른 곳에서 임포트한 아바타라 하더라도 Humanoid Type이기만 하면 unitychan에 적용할 수 있다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기


Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기