Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

애니메이션 본문

Unity3d

애니메이션

scarecrow1992 2022. 2. 22. 22:46

https://docs.unity3d.com/Manual/AnimationSection.html

 

0. 애니메이션

유니티의 애니메이션 기능에는 여러가지 기능이 제공됨

  • 리타겟팅
  • 런타임 시 애니메이션 가중치 제어
  • 애니메이션 재생 내에서의 이벤트 호출
  • FSM 구조 및 전환
  • 얼굴 애니메이션을 위한 혼합 모양 등

 

1. 아바타

모델 파일(FBX, COLLADA 등)을 임포트한 후, Model Importer 옵션 Rig 탭에서 Rig을 지정할 수 있습니다.

휴머노이드

https://docs.unity3d.com/Manual/AvatarCreationandSetup.html#:~:text=See%20in%20Glossary.,%2C%20arms%2C%20head%20and%20body.

인간형 캐릭터의 관절 애니메이션을 위한 다양한 기능을 제공해준다.

 

비-휴머노이드

비 인간형 모델의 경우 애니메이션을 위해 generic 애니메이션 타입을 쓴다.

이 경우 휴머노이드 애니메이션에서 사용할 수 있는 몇 가지 뛰어난 추가 기능을 사용할 수 없습니다. 

 

 

2. 애니메이션

애니메이션 클립 정보를 담고 있다.

유니티 상에서 애니메이션 재생이 직접 반영될 아바타 정보가 필요하다.

 

하나의 애니메이션에 2개의 클립이 묶이는 경우도 있다.

 

 

3. 애니메이터 컨트롤러

다양한 애니메이션들의 재생을 관리해주며, FSM의 형태로 한눈에 보기 쉽게 제공

하나의 node가 하나의 animation 혹은 상태를 나타낸다.

 

State

해당 state에서 재생될 애니메이션 클립에 대한 정보를 담는다.

Motion에 Animation Clip을 할당하며, 각각의 값은 수동으로 설정하거나 혹은 Parameter를 실시간으로 반영할 수도 있다.

 

Parameter

해당 애니메이터에 귀속되는 고유의 값

이 파라미터를 통해 애니메이션의 재생이나 전환을 수월하게 관리할 수 있다.

C#에서는 Animator 컴포넌트를 통해 접근하고 제어 가능하다.

 

Transition

애니메이션과 애니메이션 사이의 흐름을 제어한다.

애니메이션 mix나, 상태 전환을 위한 조건등을 설정 할 수 있다.

상태 전환 방법

  • Conditions가 만족될때
  • 아무런 조건이 없으면 자동으로 상태가 전환
  • 조건이 만족되지 못한다면 현재 node의 애니메이션이 계속 재생

transition은 크게 4가지 종류로 이루어진다.

  • int
  • float
  • bool
  • trigger

 

 

Transition(Blend)

여러가지 애니메이션을 혼합하여 재생할 수 있다.

위 처럼 Speed 파라미터의 값에 따라 Idle, Walk, Run 세가지 애니메이션을 적절히 조합할 수 있다.

 

4. 애니메이터

애니메이션 컨트롤러를 제어하여, 게임 오브젝트의 아바타가 애니메이션의 효과를 받게 한다.

2개의 정보가 필요하다.

  • 애니메이션의 흐름을 제어하기 위한 controller
  • 실제 애니메이션이 반영될 Avatar

C# 코드에서 이 애니메이터를 직접 제어할 수 있다.

 

4-1. Animator Codes

https://docs.unity3d.com/ScriptReference/Animator.html

애니메이터를 통해 컨트롤러를 제어하기 위해 자주 쓰이는 몇가지 정보에 대해 알아본다.

 

Animator

C#에서는 아래 코드로 Animator 컴포넌트를 참조할 수 있다.

1
2
Animator _animator;
bool _hasAnimator = TryGetComponent(out _animator);
cs

 

parameter

파라미터은 각각의 이름을 key삼아 접근 가능하지만, 코드에서 문자열 정보를 통째로 저장하는 대신, Hash를 통해 각  parameter에 접근가능한 정수형 key값으로 변형해주는 함수를 제공해준다.

1
2
3
4
5
int _animIDSpeed = Animator.StringToHash("Speed");
int _animIDGrounded = Animator.StringToHash("Grounded");
int _animIDJump = Animator.StringToHash("Jump");
int _animIDFreeFall = Animator.StringToHash("FreeFall");
int _animIDMotionSpeed = Animator.StringToHash("MotionSpeed");
cs

그리고 아래 함수를 통해서 파라미터에 읽기/쓰기 할 수 있다.

1
2
3
4
5
6
7
8
public float GetFloat(string name);
public float GetFloat(int id);
 
public int GetInteger(string name);
public int GetInteger(int id);
 
public bool GetBool(string name);
public bool GetBool(int id);
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
public void SetFloat(string name, float value);
public void SetFloat(string name, float value, float dampTime, float deltaTime);
public void SetFloat(int id, float value);
public void SetFloat(int id, float value, float dampTime, float deltaTime);
 
public void SetInteger(string name, int value);
public void SetInteger(int id, int value);
 
public void SetBool(string name, bool value);
public void SetBool(int id, bool value);
 
public void SetTrigger(string name);
public void SetTrigger(int id);
cs

 

 

 

'Unity3d' 카테고리의 다른 글

마우스를 따라다니는 오브젝트  (0) 2022.10.03
input event 인터페이스 관련  (0) 2022.09.17
네비게이션 메쉬(Navigation Mesh)  (0) 2022.02.22
상속  (0) 2022.02.21
시간  (0) 2022.02.21
Comments