애니메이션은 게임 오브젝트에게 움직임을 부여하는 기능으로 애니메이션을 잘 관리하기 위해 유한상태머신을 사용하는것이 좋다
유한상태머신 -행동 표현같은것을 관리할 수 있는 기법
Unity Animation
Animation - 단일의 애니메이션을 적용하기 위한 컴퍼넌트
Animation Clip - 객체의 움직임을 저장한 파일
Animation Controller - 애니메이션 클립을 등록해두고 객체의 상태마다 애니메이션들을 재생할 수 있도록 저장공간
Animator - 애니메이션 컨드롤러를 객체에 적용하기 위한 컴퍼넌트
Animation의 움직임은 오브젝트의 transform에 의해 만들어지고, transform외에 material등 다양한 컴퍼넌트 변경도 가능하다
1) 파라미터와 애니메이션

animator에서 idle, walk 애니메이션 클립을 넣어주었고 parameter(model)에 MoveSpeed, Idle을 default state로 지정해주었다

idle에서 walk로 바뀌는 조건은 MoveSpeed가 0.1 보다 클 경우 그리고 Has Exis Time을 통해 idle애니메이션이 끝나지 않아도 바로 walk애니메이션을 실행하도록 설정하였다.
Has Exis Time - 애니메이션이 다 플레이되고 다음이 진행되길 원하는지 체크시 다 끝나고 재생, 해제시 즉시전환
Transition Duration - 바뀌는 시간 (화살표가 가는시간)
2) AnyState, Exit
이때, Die클립을 넣는다고 생각해보자

모든 상황에서 Die 클립을 가르키고 있어야 하는데 이경우 클립이 다양할경우 매우 복잡해 질 것이다 이러한 경우에서 AnyState 어떤 상태든 조건을 만족하면 실행하는 경우에 붙여준다.

Exit의 경우 AnyState나 어떠한 클립이 마치고 다시 entry에서 시작하고 싶다면 exit을 연결해주도록 한다.
3)우선순위


두개의 클립을 가리킬경우 Transitions를 통해 우선순위를 정할 수 있다.
Unity에서 인간모습일 경우 Rig - Humanoid 를 선택할경우 대부분의 애니메이션은 적용이 가능하다
이경우 애니메이션 클립이 조금씩 다를 수 있는데 Maximo를 통해 알아보자
Mixamo 사이트
character : T 포즈 모델(제네릭) ybot, xbot
Animations : T Pose 검색 후 적용
Download : Format -> FBX for Unity, Skin -> with skin
유니티 프로젝트 창에 모델링파일 넣기
유니티 프로젝트의 모델링 파일을 선택하고 Rig 탭 선택
Animation Type : Generic -> Humanoid
Apply 버튼을 눌러서 적용
Configure : T pose의 모델링의 관절이 잘 매핑 됐는지 확인
혹시나 자동매핑이 되지 않는 경우면 손수 매핑해야됨
=> 휴머노이드 모델
Mixamo 사이트
Animation : 원하는 애니메이션 선택 -> animation은 generic상태
주의사항 - 모델을 다른 모델로 선정하지 말고 똑같은 모델로
애니메이션 선택
Download : Format- for Unity, Skin - without skin추천
유니티 프로젝트 창에 옮겨서 복사
유니티 프로젝트 창으로 옮긴 애니메이션 모델링파일 선택
Rig 탭 선택 -> Animation Type -> Humanoid 변경
-> T자 애니메이션이 아니기때문에 살짝 돌아가있음(퀄리티 안좋음)
Avatar Definition : Copy from Other Avatar
Source : Y bot T pose Avatar (다운받았던 휴머노이드 아바타 적용)
apply 적용
=> 믹사모를 휴머노이드 애니메이션으로 적용

다음과같이 받아온 애니메이션을 휴머노이드 copy from other avatar를 통해 가져온 t Pose avatar를 적용시키면 깔끔하게 적용이 가능하다

만약 Avatar의 T Pose 뼈대가 맞지 않다면
자동매핑이 진행되지 않을것이다. 이럴경우 직접 매핑을 진행 해줘야한다


LoopTime - 끝났었을때에도 지속적으로 시행 할것인지(죽은경우 체크해제)
loopMatch에 애니메이션 처음과 마지막의 상태가 같을경우 초록색 (죽은경우 빨간색)
애니메이션이 직진해야하는데 사선으로감
원인 : 발을 기준으로 방향을 정함
(이유1: 키차이에 의해(중심이 다른것때문) 데미지 영향차이가 있을 수 있음)
(이유2: 기준점이 중심인경우 중심이 달라지는 키차이가 있을 때
박히는현상 나타남 -=> 키가 다를경우 중심 거리 다 따로해줘야함)
애니메이터를 만드는 사람들은 center를 기준으로 애니메이션을
만들기 때문에 발이 기준이 아니라 몸 가운데(골반점을 기준)를
기준으로 만들기 때문에 원하는 방향으로 애니메이터 작동X
애니메이션을 적용해서 본다면 골반은 정면을 보고 Walk는 사선으로 이동한다
여기서 중요한게 있는데 선택하여 적용한 애니메이션이 유니티 기준으로 설정되지 않기때문에 유니티 기준으로 설정 해주어야한다.
Root Transfrom Rotation
Based Upon(기준점) : Body Orientation(골반) -> Original(발)
Bake Into Pose - 다시봐야함
bake into pose : 활성화시 오브젝트가 애니메이션 클립에 의해 회전되지 않는다
Mirror - 좌우반전(왼손, 오른손 변경)



설정을 완료하면 사선방향이 아니라 직진하는것을 볼 수 있다.

Animator : Apply Root Motion의경우 애니메이션에 의해 위치가 변경이 될지 유무이다. 보통은 비활성화를 한다.
애니메이션에서 부위 마다 다르게 동작해야 할 때가있다 즉, 같은 종류의 애니메이션이 여러종류가 있을 수 있다.
ex)
제자리 총쏘기, 걸으면서 총쏘기, 점프하면서 총쏘기, 누워서 총쏘기 등
-> 여러 상황의 애니메이션을 위해 상반신, 하반신 나눠서 만들수있다
Avatar Mask - Animator에서 Layer Upper, Base로 나눈다
AvatarMask를 생성 -> 부위별로 나눠서 애니메이션 적용가능하다
Create -> AvatarMask -> Avatar설정 -> Avatar Humanoid 사용 부위

사용할 부위 초록, 미사용부위 빨강으로 설정한다

아까 만들었던 Animation Layer에서 톱니바퀴를 선택하고, 아바타 마스크에 아바타 적용한다.
weight의 경우 가중치를 부여하는데 얼마나 이 Layer의 가중을 정할지 수치를 정하는 것이다.
Blending의 경우 덮어쓰고싶은 경우 Override를 사용해준다.
특수한 경우로 만약 BaseLayer에서 Die 애니메이션을 저장한다면 캐릭터가 죽을 경우 상반신 하반신 나누어서 플레이를 할 필요가 없어진다 그럴경우
Animator.SetLayerWeight(1,0); 으로 해당 Layer의 가중치를 0으로 설정해준다.
파라미터의 경우 Set값이 어느정도 이상된다면 애니메이션 크기가 동일하게 적용된다.(속도가 작을경우 작은 보폭, 속도가 클경우 큰 보폭이 안됨)
blend Tree의 경우 자연스럽게 변경할 수 있도록 애니메이션을 설정해줄 수 있다. (Threshold를 통해 가중치 부여하여 조정)


1) MoveSpeed = 0

2) MoveSpeed = 0.5

3) MoveSpeed = 1.5

4) MoveSpeed = 3

가중치를 MoveSpeed를 통해 플레이어의 속도에 따라 캐릭터의 속도가 달라지게 설정하였다.


