개념공부

Unity Animation with method

Cadi 2024. 12. 22. 17:39

Animation 개요

유니티에서는 Animator로 애니메이션 클립들을 관리하고, 상태를 마꿀 수 있다. 

*애니메이션 클립 : 하나의 연속된 동작으로 나오는 것들 
                               더 정확히 말하자면, 캐릭터, 오브젝트 등의 움직임을 정의한 파일

                                동작과 키프레임을 설정하여 만들 수 있음

 

애니메이션 레이어 : 여러개의 동작을 동시에 할 수 있게 해주는 기능, 기본값은 -1

 

Animator 컴포넌트 관련 함수들

 

1. animator.Play(string stateName, int layer = -1, float, noramlizedTime = 0)

  • 특정 상태의 애니메이션을 시작함
  • stateName : 재생할 애니메이션의 이름
  • Layer : 애니메이션 레이어 (기본값 -1은 현재)
  • normalizedTime : 애니메이션 시작 지점( 0~1)

2. animator.SetTrigger(string TriggerName)

  • Animator에 설정된 트리거를 활성화 함.

3. animator.ResetTrigger(string TriggerName)

  • 활성화된 트리거를 초기화 함

4. animator.SetBool(string parameterName, bool value)

  • parameterName의  boolean 파라미터를 설정함

5. animator.SetFloat(string parameterName, float value)

  • Float 값을 설정해 애니메이션 속도나 상태 등을 제어

6.. animator.GetCurrentAnimatorStateInfo(int layerIndex)

  • 현재 애니메이션 상태에 대한 정보를 가져옴

7. animator.HasState(int layerIndex, int stateHash)

  • 특정 상태가 존재하는지 확인

예시

if (animator.HasState(0, Animator.StringToHash("Run")))
{
    animator.Play("Run");
}

 

8. animator.CrossFade(stirng stateName, float transitionDuration)

  • 상태를 부드럽게 전환

9. animator.speed  

  • 애니메이션 속도 제어

예시 :

animator.speed = 2.0f; // 애니메이션 속도를 2배로 설정

 

Animation 컴포넌트 관련 함수들

animator보다 단순하고, 특정 클립만 재생하는데 적합하다.

 

1. animation.Play(string clipName)

  • 특정 애니메이션 클립을 재생함

2. animation.CrossFade( string clipName, float fadeLength)

  • 애니메이션을 부드럽게 재생(fade효과)

3. animation.Stop()

  • 재생중인 애니메이션을 멈춤

4. animation.isPlaying

  • 현재 애니메이션이 재생 중인 지확인

이외에도, 우리가 사용했던 것처럼 애니메이션 클립 내에서 이벤트를 생성해 메서드를 호출 할 수 있다.

이 방법으로 메서드를 정해놓고, 애니메이션이 진행되는 특정 시간에 메서드를 호출한다.

특정 프레임에 맞춰 스크립트 메서드를 호출하므로, 공격 타이밍, 소리, 효과 등 에서 사용됨.

 

5. animation[clipName].speed 

  • 애니메이션 속도 제어, ( 위 9번과 같음)

Animation Blend

 

애니메이션 Blend는 말 그대로 여러개의 애니메이션 클립들을 섞는 것이다.

예를 들어,  속도에 따라 걷는 애니메이션, 뛰는 애니메이션이 두 가지 있다고 하자. 

속도가 1 이상이면 뛰는 애니메이션이 나온다면, 0.1~0.9 사이의 속도를 지녔을 때 계속 같은 애니메이션이 나오고

1 이상이 된 순간 갑자기 뛰는 애니메이션이 재생되는 부자연스러운 현상이 나올 것이다.

이를 방지하기 위해 애니메이션을 섞어 주고, 비율에 따라 자연스럽게 두 애니메이션이 조절되어서 나오게 한다.

위로 가는 애니메이션과 왼쪽으로 가는 애니메이션을 섞어 대각선 방향으로 가는 애니메이션을 만들기도 한다.

 

코드에서는 SetFloat를 사용하여 블렌드 트리를 제어한다. 

 

Animator Layer

 

Blend 기능이 여러가지 애니메이션을 섞는 것이라면, Layer 기능은 여러 가지의 애니메이션을 동시에 재생하는 것이다.

예를 들어, 달리는 도중 공격 모션을 할 때, 하체는 그대로 달리고 상체는 공격 모션을 재생할 수 있다. 

이를 위해서는 아바타 설정을 하고, layer에서 하체와 상체를 나눠준 뒤, 따로 애니메이션을 설정해주면 된다.

 

정리하자면, 애니메이션 레이어는 서로 다른 부분에 서로 다른 애니메이션을 동시에 적용할 수 있게 함

  • 기본 레이어(index 0)은 항상 존재, 추가적인 레이어 (index 1, 2 ...)를 설정 가능
  • 각 레이어는 가중치(weight)로 애니메이션의 영향을 조절 가능
    예를 들어, 공격 모션이 50퍼센트만 반영되도록 하게 할 수 있음

layer에서 상체와 하체를 다른 애니메이션을 사용하도록 하려면 Avatar Mask를 사용하면 된다.

 

 

 

관련 함수는 다음과 같다.

 

1. animator.GetLayerWeight(int layerIndex)

  • 특정 레이어의 가중치를 가져온다.

2. animator.SetLayerWeight(int layerIndex, float weight)

  • 특정 레이어의 가중치를 설정한다. 

*weight : 가중치, 현제 레이어와 아래 레이어의 애니메이션 비중, 1에 가까울수록 현재 레이어와 가까운 모션

 

Animator와 Animation의 차이점

  • Animator : 상태 기반(State Machine)을 통해 애니메이션을 관리, 복잡한 애니메이션 전환과 트리거 지원
  • Animation : 단순히 특정 클립을 재생하거나 정지하는 기능만 제공

 

의문

 

개념 정리 이후 생긴 궁금한 점은 다음과 같다.

Blending 하는 것과 Layer에서 weight로 조절하는 것은 무슨 차이인가 ?

 

결론은, 특정 상황에서는 비슷한 결과를 낼 수 있지만 , 다른 기능이라는 것이었다.

Layer가 병렬 애니메이션을 위한 것인 느낌이다. 

 

Blend가 여러가지 애니메이션을 비율로 혼합해 하나의 애니메이션을 만들어 낸다면,

Layer의 Weight 방식은 어떤 레이어가 더 많이 비중을 차지할지를 정한다. 

 

이렇게 보면, Weight가 조금 더 정밀한 방식으로 보일 수도 있겠지만, Weight 방식은 비율을 정밀하게 계산하거나 파라미터 기반 혼합은 불가능하다.

https://www.youtube.com/watch?v=5WyebyiOayk

추가 : 실제로 애니메이션 Layer를 사용하는 것을 보니 개념이 조금 덜 헷갈린다. 

블렌드는 애니메이션 두 개를 섞어, 파라미터 비율에 따라 다르게 , 자연스럽게 섞이게 하는 것이고

레이어는 우리가 특정 상황(HP가 줄어드는 등)에서 다른 애니메이션을 덧씌우는 것이고 아바타를 분리할 수도 있다.

 

 

 

참조 :

https://www.youtube.com/watch?v=U5YQBpKYhvI

 

https://docs.unity3d.com/kr/2022.3/Manual/AnimationLayers.html

 

애니메이션 레이어(Animation Layers) - Unity 매뉴얼

Unity는 서로 다른 신체 부위의 복잡한 상태 머신을 관리하기 위해 Animation Layers 를 사용합니다. 예를 들면, 하체 레이어는 뛰거나 걷는 것을 관리하고, 상체 레이어는 오브젝트를 던지거나 사격하

docs.unity3d.com

 

https://ansohxxn.github.io/unity%20lesson%201/chapter9-3/

 

Unity Chapter 9-3. 애니메이션 : 애니메이터 레이어, 마스크, IK

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

ansohxxn.github.io

https://docs.unity3d.com/kr/560/Manual/class-BlendTree.html

 

블렌드 트리 - Unity 매뉴얼

게임 애니메이션에서는 두 가지 이상의 모션을 블렌드하는 작업을 자주 합니다. 가장 흔한 예로 캐릭터의 속도에 따른 걷기와 달리기 애니메이션 블렌딩을 들 수 있습니다. 또 다른 예로는 캐릭

docs.unity3d.com

 

'개념공부' 카테고리의 다른 글

Unity Camera  (0) 2024.12.23
Gizmos 관련 메서드  (0) 2024.12.23
Static  (0) 2024.12.19
캡슐화(Encapsulation)  (0) 2024.12.15
ScriptableObject  (1) 2024.12.15