본문 바로가기
[ Unity ]/- 유니티 실습

유니티 Animator, Animation, Blend Tree

by MRG 2024. 9. 14.
728x90
반응형

 

 

https://makerejoicegames.tistory.com/521

 

유니티 애니메이션 스프라이트

▣ 애니메이션 에셋을 가져오고 스프라이트를 선택한 다음 Sprite Mode와 Filter Mode를 지정하고 Sprite Editor을 선택합니다.   ▣ Silce메뉴를 선택하고 Type을 Automatic을 선택한 다음 Slice로 자르기를 진

makerejoicegames.tistory.com

 

 

▣ Animation (애니메이션)
Animation은 게임 오브젝트의 동작을 프레임 단위로 정의한 것입니다. 

애니메이션 클립(Animation Clip)을 통해 오브젝트가 어떤 방식으로 움직이는지, 변화하는지를 설정할 수 있습니다. 

예를 들어, 캐릭터가 걷거나 뛰는 동작, 또는 문이 열리고 닫히는 애니메이션을 만들 수 있습니다.

주요 특징:
정의: Animation Clip은 오브젝트의 속성(위치, 회전, 스케일, 색상 등)이 시간에 따라 변화하는 일련의 동작을 정의한 것입니다.
애니메이션 클립: 각각의 애니메이션 클립은 하나의 동작을 정의합니다. 예를 들어 걷기, 달리기, 점프, 공격 등.
재생: 애니메이션은 Animation 컴포넌트 또는 Animator 컴포넌트를 통해 재생됩니다.
애니메이션 적용 대상: 애니메이션 클립은 오브젝트의 Transform, Sprite, Material 등 다양한 속성에 적용 가능합니다.


예시:
캐릭터가 걷는 애니메이션.
버튼을 클릭했을 때, 버튼의 크기가 변하는 애니메이션.
날씨 효과로 나무가 바람에 흔들리는 애니메이션.

 


▣ Animator (애니메이터)
Animator는 여러 개의 애니메이션 클립을 관리하고, 그 클립들 사이의 전환(Transition)을 제어하는 시스템입니다. 

Animator는 게임 캐릭터나 오브젝트가 다양한 상황에서 다른 애니메이션을 부드럽게 전환하도록 설계되어 있습니다.

주요 특징:
Animator Controller: Animator Controller는 애니메이션 상태(State)를 정의하고, 상태 간의 전환(Transition)을 설정하는 도구입니다. 애니메이션 클립들을 논리적으로 연결하고, 파라미터와 조건을 이용해 애니메이션을 제어할 수 있습니다.
상태(State): 각 상태는 하나의 애니메이션 클립과 연결됩니다. 예를 들어, Idle 상태, Walk 상태, Run 상태 등.
전환(Transition): 상태 간의 전환은 조건(Conditions)을 기반으로 이루어집니다. 예를 들어, 캐릭터의 Speed 파라미터가 5 이상이면 Walk 상태에서 Run 상태로 전환됩니다.
파라미터(Parameters): Animator에서 애니메이션 전환을 제어하기 위해 사용하는 변수입니다. 파라미터에는 Float, Int, Bool, Trigger가 있으며, 이를 사용해 상태 간 전환 조건을 설정할 수 있습니다.

 

 

 

 

https://docs.unity3d.com/Manual/class-Animation.html

 

Unity - Manual: Animation

Animation Scripting (Legacy) Animation Switch to Scripting This is the Legacy Animation component, which was used on GameObjectsThe fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObje

docs.unity3d.com

 

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

 

Unity - Manual: The Animator Controller Asset

The Animator Controller Asset When you have animation clipsAnimation data that can be used for animated characters or simple animations. It is a simple “unit” piece of motion, such as (one specific instance of) “Idle”, “Walk” or “Run”. More

docs.unity3d.com

 

 

 

 

▣ 설명:
Animator 컴포넌트를 통해 애니메이션을 제어합니다.
GetKey() 함수는 키보드 입력을 감지하여 특정 애니메이션 상태로 전환합니다.

 

 

 

 

 

▣ 설명:

애니메이터에서 파라미터 조건이 되는 데이터를 정하고 애니메이션 흐름선에 파라미터에 대한 조건을 정합니다. 
SetTrigger() 함수는 애니메이션 전환을 위한 트리거를 활성화합니다.

그럼 키를 누르면 조건이 True가 되고 애니메이션이 재생됩니다. 

 

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

 

Unity - Scripting API: Animator.Play

When you specify a state name, or the string used to generate a hash, it should include the name of the parent layer. For example, if you have a Bounce state in the Base Layer, the name is Base Layer.Bounce. The normalizedTime parameter varies between 0 an

docs.unity3d.com

 

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

 

Unity - Scripting API: Animator.SetTrigger

This method allows you to set (i.e. activate) an animation trigger, to cause a change in flow in the state machine of an animator controller. The Animation Parameters page describes the purpose of the Animator Controller Parameters window. Trigger is one o

docs.unity3d.com

 

 

 

▣ New Input System을 사용할때에는 이런식으로 moveDirection값을 활용하여 SetFloat() 값을 전달하고 애니메이션을 움직이게 할 수도 있습니다.

 

▣ 대각선으로 할때에 문제가 되기 때문에 0보다 큰 숫자를 만들기 위해서 

 

▣ animator.SetFloat("Run",(Mathf.Abs(moveDirection.x) + Mathf.Abs(moveDirection.y)));

으로 하거나 magnitude를 사용해서

magnitude는 벡터의 크기(길이)를 반환하는 속성입니다. 2D 벡터 (x, y)의 경우, 벡터의 크기는 피타고라스의 정리에 따라 계산됩니다. 즉, magnitude는 벡터의 각 성분을 제곱하여 더한 뒤, 그 값의 제곱근을 구한 값입니다.

 

 

 

 

▣ Blend Tree는 Unity에서 애니메이션을 보다 자연스럽고 동적으로 전환할 수 있도록 해주는 애니메이터 기능 중 하나입니다. Blend Tree를 사용하면 여러 애니메이션 클립을 하나의 트리 구조로 결합하여, 특정 파라미터 값에 따라 애니메이션이 부드럽게 섞이면서 전환될 수 있습니다. 특히, 다양한 움직임을 자연스럽게 처리해야 하는 캐릭터의 이동, 회전, 속도에 따라 애니메이션을 다르게 적용하는 경우에 유용합니다.

▣ Blend Tree를 사용하는 이유
다양한 움직임을 자연스럽게 연결: 예를 들어, 캐릭터가 걷기에서 달리기로 전환하거나, 좌우 방향을 바꾸는 등 여러 애니메이션 상태를 자연스럽게 연결할 수 있습니다.
애니메이션 간 부드러운 전환: 파라미터 값(속도, 방향 등)에 따라 여러 애니메이션을 블렌드(혼합)하여 부드러운 전환을 가능하게 합니다.
복잡한 애니메이션 전환 제어: 단순히 애니메이션 상태를 전환하는 것보다 더 복잡한 애니메이션 흐름을 쉽게 구성할 수 있습니다. 예를 들어, 캐릭터의 이동 속도에 따라 걷기, 뛰기 애니메이션을 자동으로 전환합니다.


▣ Blend Tree를 설정하는 방법
Animator Controller 생성: 먼저 Animator Controller를 생성하고, 캐릭터에 연결합니다.
Blend Tree 생성: Animator Controller 창에서 상태(State)를 하나 추가하고, 이를 Blend Tree로 변환합니다.
파라미터 설정: Blend Tree에서 사용할 파라미터(예: 속도)를 정의합니다.
애니메이션 연결: 여러 애니메이션 클립을 Blend Tree에 연결하고, 파라미터 값에 따라 어떻게 애니메이션이 전환될지 설정합니다.

 

▣ Unity의 Blend Tree에서 Blend Type은 여러 애니메이션 클립을 섞는 방식(Blend)을 결정하는 중요한 요소입니다. Blend Type은 특정 파라미터(예: 속도, 방향 등)를 기준으로 애니메이션을 자연스럽게 전환하는 방식에 영향을 줍니다. 이를 통해 하나의 애니메이션에서 다른 애니메이션으로 부드럽게 전환할 수 있습니다.

▣ 주요 Blend Type 종류
1D Blend
2D Simple Directional
2D Freeform Directional
2D Freeform Cartesian

 

▣ 1D Blend
설명: 하나의 파라미터에 따라 여러 애니메이션을 블렌딩 합니다.
사용 예시: 캐릭터의 이동 속도에 따라 걷기, 달리기, 멈춤 상태를 자연스럽게 전환할 때 사용됩니다.
파라미터: 하나의 파라미터만 사용하며, 일반적으로 속도(Speed)가 사용됩니다.
예를 들어, Speed 파라미터가 0일 때는 Idle, 15일 때는 Walk, 510일 때는 Run으로 애니메이션이 부드럽게 전환됩니다.

▣ 2D Simple Directional
설명: 두 개의 파라미터(예: Speed와 Direction)를 기준으로 애니메이션을 혼합합니다. 이 Blend Type은 캐릭터가 여러 방향으로 움직이는 게임에서 주로 사용됩니다.
사용 예시: 2D 플랫폼 게임이나 캐릭터가 4방향 또는 8방향으로 움직일 때 자연스러운 전환을 구현하는 데 사용됩니다.
파라미터: 두 개의 파라미터, 보통 속도와 방향(각도)이 사용됩니다.
예를 들어, 캐릭터가 이동할 때 Speed와 Direction에 따라 각 방향으로 이동하는 애니메이션을 자연스럽게 블렌딩 합니다. 예시:

animator.SetFloat("Speed", speed);
animator.SetFloat("Direction", direction);



▣ 2D Freeform Directional
설명: 캐릭터가 다양한 방향으로 이동할 때(예: 360도 전방위 움직임) 사용하는 블렌드 타입입니다. 

애니메이션의 각도와 방향을 자연스럽게 블렌딩 합니다.
사용 예시: 3D 게임에서 캐릭터가 모든 방향으로 움직이는 경우(360도 회전하면서 이동할 때) 유용합니다.
파라미터: 두 개의 파라미터(Speed, Direction)를 사용하며, 방향에 대한 가중치를 부여하여 애니메이션이 블렌딩 됩니다.
차이점:
2D Simple Directional과는 달리, Freeform Directional은 더 복잡한 방향 이동을 처리할 수 있으며, 보다 세밀한 각도로 애니메이션을 블렌딩 할 수 있습니다.


▣ 2D Freeform Cartesian
설명: 두 개의 파라미터를 사용하여 애니메이션을 블렌딩 하되, 두 파라미터가 독립적으로 적용됩니다. 

이는 보통 속도와 방향이 아닌, 두 개의 전혀 다른 파라미터를 블렌딩 할 때 사용됩니다.
사용 예시: 캐릭터의 이동 속도와 체력 상태에 따라 애니메이션이 다르게 재생되는 경우와 같이, 두 개의 파라미터가 독립적으로 영향을 줄 때 유용합니다.
파라미터: 두 개의 파라미터가 독립적으로 애니메이션에 영향을 미치며, 애니메이션 블렌딩 방식이 보다 자유롭습니다.
차이점:
2D Freeform Directional과 달리, Cartesian은 방향보다는 독립적인 두 파라미터를 기준으로 애니메이션을 혼합합니다.

 


▣ Blend Type 설정 예시
애니메이터에서 Blend Tree를 설정할 때, 아래와 같은 순서로 진행합니다:
애니메이터 창 열기: Unity Editor에서 Window > Animation > Animator를 선택하여 Animator 창을 엽니다.
Blend Tree 생성: Animator Controller에서 새로운 상태(State)를 만들고, 이 상태를 Blend Tree로 변경합니다.
Blend Type 선택: Blend Tree 창에서 Blend Type을 설정할 수 있습니다. 기본적으로 1D Blend가 선택되며, 이를 2D Simple Directional 또는 다른 Blend Type으로 변경할 수 있습니다.
파라미터 설정: Blend Type에 따라 1개 또는 2개의 파라미터를 설정하고, 각각의 파라미터에 따라 애니메이션 클립이 블렌딩 되도록 설정합니다.


요약
1D Blend: 하나의 파라미터에 따라 애니메이션을 부드럽게 전환.
2D Simple Directional: 두 개의 파라미터(속도와 방향)를 기준으로 애니메이션을 블렌딩.
2D Freeform Directional: 캐릭터가 모든 방향으로 움직일 때, 360도 전방위에서 자연스럽게 블렌딩.
2D Freeform Cartesian: 독립적인 두 파라미터를 기준으로 애니메이션을 블렌딩.

 

 

 

 

▣ Unity의 Animator에서 Conditions는 애니메이션 상태(State) 간 전환을 제어하는 중요한 요소입니다. 상태 간 전환 시 특정 조건이 충족될 때 애니메이션이 자연스럽게 전환되도록 설정할 수 있는데, 이때 Greater(이상)와 Less(이하)를 이용한 조건과 함께 숫자를 입력하게 됩니다.

▣ Conditions의 역할
애니메이터에서 조건(Conditions)은 애니메이션 전환의 기준을 설정하는 역할을 합니다.

특정 파라미터의 값이 설정한 기준 값보다 크거나 작을 때, 애니메이션 상태가 전환됩니다.

▣ Greater와 Less의 의미
Greater: 선택한 파라미터의 값이 설정한 숫자보다 크거나 같을 때 애니메이션 상태 전환이 발생합니다.
Less: 선택한 파라미터의 값이 설정한 숫자보다 작거나 같을 때 애니메이션 상태 전환이 발생합니다.


▣ 숫자의 의미
Conditions에서 숫자를 입력하는 부분은 해당 조건의 기준 값을 설정하는 것입니다. 즉, 파라미터 값이 이 숫자보다 크거나 작을 때 상태 전환이 발생하게 됩니다.

▣ 예시:
파라미터가 Speed이고, 전환 조건을 Speed Greater than 5로 설정하면, Speed 파라미터가 5 이상일 때 애니메이션 상태가 전환됩니다.
반대로, Speed Less than 2로 설정하면 Speed 파라미터가 2 이하일 때 전환이 발생합니다.

 

  숫자 입력에 따른 조건
Greater와 Less의 조건에 따라 설정한 숫자는 애니메이션 전환의 기준입니다.
Speed Greater than 5라고 설정하면, Speed 파라미터가 5 이상일 때 애니메이션 상태가 전환됩니다.
Speed Less than 0.1라고 설정하면, Speed 파라미터가 0.1 이하일 때 애니메이션 상태가 전환됩니다.

 

 

 

▣ 설명

입력 시 애니메이터 파라미터 speed를 설정하는 코드입니다. 

플레이 시 입력할 때 Blend Tree를 호출합니다. 

 

 

 

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

 

Unity - Scripting API: Animator.SetFloat

Use SetFloat in a script to send float values to the Animator in order to activate transitions. In the Animator, define what values affect how certain animations transition. This is useful in various situations, especially in animation cycles such as movem

docs.unity3d.com

 

728x90
반응형

'[ Unity ] > - 유니티 실습' 카테고리의 다른 글

유니티 Camera Shake  (0) 2024.09.15
유니티 Single RayCast, Multi RayCast  (1) 2024.09.14
유니티 오브젝트 스크롤링  (1) 2024.09.13
유니티 2D Collider  (0) 2024.09.13
유니티 2D 배경 스크롤링  (1) 2024.09.12

댓글