애니메이터분들이 미리 세팅된 Animation을 만들어준다
Unity 모델에도 유니티짱에서 만들어진 Animation이 작동한다.
(Animation타입 Humanoid)
같은 스켈레톤 에셋을 공유하나 비율이 다른 캐릭터간에 애니메이션 재사용할 수 있도록
(체형 달라도 사용할 수 있게)
이것 때문에 유니티짱 Animation이 기본 Unity모델에도 적용된다
Animation
레거시 애니메이션(구버전에서 사용하는 애니메이션)
요즘은 사용안한다고함
요즘은 이걸쓴다고한다
메카님 애니메이션(메카님은 Unity에 통합된 애니메이션 소프트웨어의 이름)
기본으로 세팅된 것도 있지만 교육을 위해서 새로 만든다
열어보면 이런창이 나온다(Entry가 시작점)
Animator에 Controller 설정을 한다
Entry(시작지점)을 RUN과 연결시키고 실행한다
if (_moveToDest)
{
Animator anim = GetComponent<Animator>();
anim.Play("RUN");
}
else
{
Animator anim = GetComponent<Animator>();
anim.Play("WAIT");
}
멈출 때 부자연스럽게 한순간에 멈추는 애니메이션 수정을 위해서
회전할 때 Slerp 사용한 것처럼 blending을 사용해서 일정 퍼센트 wait/run한다
Blend에 WAIT와 RUN을 추가해서 서로 블렌딩한다.
Thresho는 애니메이션 그래프 상의 위치를 뜻한다
0~1 사이의 값은 WAIT00와 RUN00_F가 블렌딩 될 것이라는걸 뜻한다.
이를 표현하기 위해서 Lerp를 사용한다
if (_moveToDest)
{
//현재값에서 1쪽으로 일정비율로 간다
wait_run_ratio = Mathf.Lerp(wait_run_ratio, 1, 10.0f * 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, 10.0f * Time.deltaTime);
Animator anim = GetComponent<Animator>();
anim.SetFloat("wait_run_ratio", wait_run_ratio);
anim.Play("WAIT_RUN");
}
내 상태에서 적용할 수 있는 코드를 분리할 수 있는 장점
단점 : 동시에 두가지 상태를 가질 수 없다
public enum PlayerState
{
Die,
Moving,
Idle,
}
PlayerState _state = PlayerState.Idle;
void Update()
{
switch (_state)
{
case PlayerState.Die:
UpdateDie();
break;
case PlayerState.Moving:
UpdateMoving();
break;
case PlayerState.Idle:
UpdateIdle();
break;
}
}
State마다 만들어진 함수에 대응되는 코드와 애니메이션을 넣으면된다.
if (dir.magnitude < 0.0001f)
{
_state = PlayerState.Idle;
}
한 상태에서 다른 상태로 가기 위한 조건을 정의하게 된다
위는 Moving State에서 위치에 도착하면 Idle State로 바뀌는 상태이다
한 상태에서 다른 상태로 넘어가기 위한 조건을 달아줘야한다(없으면 기본 조건으로 넘어감)
State가 엄청 늘어나서 조건이 복잡해질수록 코드로 하는것 보다
상태관리를 툴로 하면 보기가 편하고 관리가 용이하다
툴로 편하게 조절 가능
끝나는 지점이 있다 -> 애니메이션을 실행한번 한뒤에 빠져나와라
Has Exit Time을 체크안하면 같은 애니메이션 무한반복된다
Exit Time : 얼마정도 기다렸다가 넘어갈꺼나
Fixed Duration : 절대시간
ex) Fixed Duration (O) 0.55초
Fixed Duration (X) 55%
(하나에 여러개 연결하고 조건이 없을시 기준)
Exit Time 작은것이 우선이고 같은 경우는 Transitions 순서대로 동작
경우에 따라서는 자동으로 연결했을 때 좋은경우가 있다
ex) 점프: 점프할 때 조금씩 달라지는 모습(점프 -> 최고점 -> 내려올 때 모습)
일반적인 달리기 멈추기는 조건으로 만들어줘야한다
파라미터 조건을 가지고 State Machine 조건을 설정한다
프로그램(코드) <-> 파라미터 <-> Animator(State Machine)
장점 : 애니메이션 부분과 코드 분리
파라미터를 넣고 각 애니메이션 연결 부위에 조건을 달아서 코드를 설정 후 speed값을 변경시켜주면 된다
//애니메이션
Animator anim = GetComponent<Animator>();
anim.SetFloat("speed", 0);
위는 멈춰있을 때 애니메이션 부분을 구현한 것이다
나중에 상하체 분리 애니메이션을 만들 때 애니메이션 레이어
를 사용한다
이동 점프 수영 같은 경우는 State Machine으로 만들고
스킬이 많아질경우 처음한것처럼 코드로 빼서 따로 관리함
Part3: 유니티 엔진
섹션 6.Animation(애니메이션)
애니메이션 리타겟팅
Blend
Lerp
메카님 애니메이션