https://makerejoicegames.tistory.com/521
▣ 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
https://docs.unity3d.com/Manual/Animator.html
▣ 설명:
Animator 컴포넌트를 통해 애니메이션을 제어합니다.
GetKey() 함수는 키보드 입력을 감지하여 특정 애니메이션 상태로 전환합니다.
▣ 설명:
애니메이터에서 파라미터 조건이 되는 데이터를 정하고 애니메이션 흐름선에 파라미터에 대한 조건을 정합니다.
SetTrigger() 함수는 애니메이션 전환을 위한 트리거를 활성화합니다.
그럼 키를 누르면 조건이 True가 되고 애니메이션이 재생됩니다.
https://docs.unity3d.com/ScriptReference/Animator.Play.html
https://docs.unity3d.com/ScriptReference/Animator.SetTrigger.html
▣ 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 ] > - 유니티 실습' 카테고리의 다른 글
유니티 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 |
댓글