일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C#
- 2870번
- 2870번 수학숙제
- 백준 1103번 게임
- 2870번 수학숙제 c++
- Lv2
- 백준 17070번
- 17070번
- Algorithm
- 코테
- 백준 c++ 2468번
- 백준 17070번 c++
- 플레이어 이동
- 백준 c++ 2870번
- 백준
- 코딩테스트
- 유니티
- 수학숙제
- c++
- Beakjoon
- dfs
- 2468 c++
- Unity
- Lv.3
- 프로그래머스
- 백준 1103번 c++
- 백준 1103번
- 2870번 c++
- 백준 2870번
- 오브젝트 풀링
- Today
- Total
주녘공부일지
[Unity] Animation Blending 본문
Animation Blending 이란?
블랜드 트리를 활용하여 두 가지 이상의 모션을 섞는 것으로, 매끄러운 애니메이션 재생을 위해 사용함
( 즉, 애니메이션 변화에 딜레이를 주면서 딜레이되는 시간동안 모션을 섞는 것이라고 봐도 무방 )
Blend Type
1D : 블랜드 할 기준 값이 하나만 필요한 블랜드 트리에 사용 ( 아래 예제의 wait_run_ratio 파라미터 )
2D Simple Directional
- 모션이 다른 방향을 표시할 때 유용, 같은 방향으로 여러 모션을 가질 수 없음
ex) 앞으로 걷기, 뒤로 걷기, 오른쪽으로 걷기, 왼쪽으로 걷기
2D Freeform Directional
- 모션이 다른 방향을 표시하고 같은 방향에서 여러 모션을 가질 수 있음
ex) 앞으로 걷기, 앞으로 뛰기 + 대기 상태 포지션(0, 0)에 싱글 모션을 포함하는 것이 좋음
2D Freeform Cartesian
- 블랜드 할 기준 값이 두개가 필요하지만, 모션이 다른 방향을 가리키지 않을 때 유용함
ex) 앞으로 걷고 돌지않기, 앞으로 뛰고 돌지 않기, 앞으로 걷고 오른쪽으로 돌기, 등
Direct : 얼굴 표정, 등의 랜덤한 대기 상태의 블렌딩에 사용 ( 각 노드의 가중치를 직접 컨트롤 )
Animation State Machine // Blend Tree ( + Blend Type 1D 예제 )
void Update()
{
if (_moveToDest)
{
wait_run_ratio = Mathf.Lerp(wait_run_ratio, 1, 10f * Time.deltaTime);
Animator anim = GetComponent<Animator>();
anim.SetFloat("wait_run_ratio", wait_run_ratio);
anim.Play("WAIT_RUN");
}
else
{
wait_run_ratio = Mathf.Lerp(wait_run_ratio, 0, 10f * Time.deltaTime);
Animator anim = GetComponent<Animator>();
anim.SetFloat("wait_run_ratio", wait_run_ratio);
anim.Play("WAIT_RUN");
}
}
_moveToDest 는 이동 상태인지를 나타내는 bool 타입 변수
Mathf.Lefp(선형보간)를 사용해서 0 ~ 1까지의 값을 wait_run_ratio라는 float형 애니메이터 파라미터에 입력하여 애니메이션이 블랜드 되는 정도를 컨트롤해 부드러운 애니메이션을 재생시킴
+ 애니메이션 블랜딩에 대한 간단한 예제로 if else문으로 처리하였지만, 만약 애니메이션이 간단하지 않고 상태의 수가 많을 경우에는 스테이트 패턴을 활용해 처리하는 것이 바람직
https://godgjwnsgur7.tistory.com/42
[Unity] 상태 패턴 (State Pattern)
상태 패턴(스테이트 패턴)이란? 상태 패턴은 오브젝트의 상태에 따라 동작이 달라질 때 이용하는 디자인 패턴 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Pla..
godgjwnsgur7.tistory.com
Animation State Machine // Transition
Has Exit Time
종료 시점을 활성화 하는 옵션 ( 전이 조건은 트랜지션의 컨디션 조건 )
- 활성화 시 : 전이 조건이 만족해도 종료 시점이 되야 전이 ( 애니메이션 실행 끝나고 이동 )
- 비활성화 시 : 전이 조건이 만족하는 즉시 전이 ( 애니메이션 도중 이동 )
+ 위 예제의 Has Exit Time이 꺼져있는 이유는 2D Blend Type에서 Idle 모션을 가지고 있기 때문
Fixed Duration : Setting 값들이 초 단위 ( 0.25 -> 0.25초 ), % 단위 ( 0.25 -> 25% )
Transition Duration : 두 애니메이션을 섞어서 스무스하게 만드는 시간 ( 값이 클수록 느려짐 )
Transition Offset : 트랜지션이 일어나는 시간을 미룸 ( 값이 클수록 느려짐 )
Blend Type 2D 예제 ( 2D Freeform Directional )
- 빨간색 점은 현재 섞인 정도를 컨트롤하기 위한 현재 위치이며, 참조 파라미터로 설정해놓은 DirX, DirZ값에 따라 빨간 점이 이동하고 각 모션 (파란 점) 에 빨간 점의 유효 거리(범위)에 닿은 상태에서 근접한 거리에 따라 모션(파란 점)이 활성화됨 (가까운 정도에 따라 섞는 정도를 조절)
즉, 빨간색 점이 서서히 움직이면, 위치에 따라 근접해진 모션들이 활성화 되며, 활성화된 모션들이 블랜딩되면서 부드러운 모션을 실행하게 됨
'GameDevelopment > [Unity] Class, Pattern' 카테고리의 다른 글
[Unity] 싱글톤 패턴 (Singleton Pattern) (1) | 2023.12.06 |
---|---|
[Unity] MonoBehaviour Life Cycle (생명주기) (0) | 2023.09.05 |
[Unity] StateMachineBehaviour (0) | 2022.03.23 |
[Unity3D] Camera (0) | 2022.03.01 |
[Unity3D] Physics.Raycast (+LayerMask) (0) | 2022.02.24 |