Unity Chapter 9-2. 애니메이션 : 트랜지션, 블랜드 트리, 루트 모션, 아바타
카테고리: Unity Lesson 1
태그: Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 9. 유니티 애니메이션
Asstes Store에서 “Unity-Chan!”을 Import 해주었다.
🔔 트랜지션
Has Exit Time
- Has Exit Time이 체크되면 애니메이터의 종료되는 시점이 있다는 얘기 (Settings - Exit Time)
- 트랜지션 조건이 맞다고 하더라도 Exit Time이 지난 후에 조건에 맞는 다른 트랜지션을 발동한다.
- 빠릿빠릿하게 움직이게 하고 싶다면 체크 해제하는게 좋다.
- 그러나 조건이 아예 없는 트랜지션이라면 상태가 끝나면 끝난체로 가만히 있게 되니 반드시 Has 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를 설정해준다.
- 1D에서 2D Simple Directional로 바꿔주기
- 다시 한번 더
- 위와 같이 정지, 오른쪽, 왼쪽, 앞, 뒤 이렇게 5가지 애니메이션 클립을 Motion에 붙여준 후 PosX, PosY를 지정해준다.
- 현재 PosX는 Horizontal값이 되고, PosY는 Speed 값이 된다.
- 🔴 빨간색 점은 현재 섞인 정도를 뜻한다.
- 예를 들어
- Horizontal 값이 -1에 가까울수록, Speed값이 1에 가까울수록 (왼쪽 + 앞쪽) 대각선으로 가게될 것
- 예를 들어
- 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);
}
}
- 가로방향 입력 처리를 추가해주었다.
🔔 루트 모션 + 아바타
Apply Root motion
- Animator 컴포넌트에서 Apply Root Motion
- : 애니메이션에 의해서 애니메이션 컴포넌트가 붙어있는 오브젝트의 실제 좌표값이 변경된다.
- 앞으로 가는 애니메이션이 적용된다면 오브젝트 좌표도 갱신된다.
- : 코드에 의해서 오브젝트 실제 좌표값을 제어하려 한다면 이렇게 해제해야한다.
- 이 강의에서는 해제한 채로 진행할 것이다.
- : 애니메이션에 의해서 애니메이션 컴포넌트가 붙어있는 오브젝트의 실제 좌표값이 변경된다.
Avatar
Avatar
: 보편적인 3D 모델을 받아 들일 수 있도록 만들어진 뼈대
- Animator 컴포넌트에서 Avatar
- 현재 여기에 붙어있는
Avatar
의 Type은 Humanoid Type이다.- 즉, Humanoid Type타입의 아바타라면 어떤 3D 모델이든 받아들이 수 있는 인터페이스 같은 것이다.
- 꼭 unitychanAvatar가 아니더라도 에셋 스토어나 다른 곳에서 임포트한 아바타라 하더라도 Humanoid Type이기만 하면
unitychan
에 적용할 수 있다.
- 현재 여기에 붙어있는
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기