Unity Chapter 11-4. 좀비 TPS 게임 만들기 : Player Animation
카테고리: Unity Lesson 1
태그: Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 11. 좀비 TPS 게임 만들기
🔔 Player Animation
Player Character
오브젝트의 애니메이션 설정 (Animator 컴포넌트)
- Animator 컴포넌트
- Apply Root Motion 을 체크 해제해준다.
- 루트 모션이 아니라 코드를 통하여 통제할 것이기 때문
- 루트 모션을 체크하면 애니메이션에 의해서 오브젝트의 실제 좌표값이 변경된다.
- 해제하면 코드에 의해서 오브젝트의 실제 좌표값을 통제한다.
- 루트 모션 포스트 참고
- 루트 모션이 아니라 코드를 통하여 통제할 것이기 때문
- 📂Animations/Shooter Animator 애니메이션 컨트롤러를
Player Character
오브젝트의 Animator 컴포넌트의 Controller에 드래그 앤 드롭 해준다.
- Apply Root Motion 을 체크 해제해준다.
애니메이션 컨트롤러
애니메이션 클립들은 📂Animation/ShooterClips 에 있음
Parameter
- Vertical Move, Horizontal Move
- 플에이어의 수직 수평 방향 움직임에 대응되고 -1 ~ +1 사이의 값을 전달 받는다.
- 기본 이동 애니메이션
- Angle
- 0~1 사이의 값을 전달 받으며 수직 방향에 대해서 플레이어가 조준하는 각도.
- 위를 보거나 아래를 볼때 애니메이션
- 플레이어가 아래를 봐서 Angle 값이 0이면 플레이어의 상체도 아래를 향하도록 애니메이션을 구현할 것.
- Angle 값이 1이면 위쪽 바라보는 것도 위를 향하도록 애니메이션 구현할 것.
- Angle 값이 0.5 이면, 즉 정중앙을 바라보면 정자세 애니메이션.
- 기본값은 0.5
- Reload
- 재장전 애니메이션 에 사용될 Trigger
- Shoot
- 발사(총기 반동) 애니메이션 에 사용될 Trigger
- Die
- 사망 애니메이션에 사용될 Trigger
Layer
Base Layer
- Vertical Move, Horizontal Move 파라미터를 사용
- 정지 & 기본 이동 애니메이션
- IK Pass 를 체크
- Base Layer는 최 하단에 있는 Layer이므로 제일 밑에서 덮어 씌우기 당하는 Layer다.
- 따라서 장전이나 총쏘는 애니메이션을 담당하는 상위 Layer에서 관절을 움직이면(IK) 기본 이동 애니메이션을 담당하는
Base Layer
에도 이게 덮어씌워 적용되야 하므로 IK PASS 에 체크!
- Movement 블렌딩 트리
- 앞,뒤,좌,우,대각선(앞좌, 앞우, 뒤좌, 뒤우) 총 8 개의 애니메이션. (Idle 포함하면 9개)
- 플레이어의 움직임, 즉 들어오는 Horizontal Move, Vertical Move 값에 따라 이 애니메이션들을 적절히 섞어 사용한다.
- 예를 들어 Horizontal Move, Vertical Move 값이 (0, 1)에 가까울수록 앞으로 이동하는 애니메이션(Run_N)이 강하게 동작할 것이고 (0.7, 0.7)에 가까울 수록 앞 오른쪽 대각선 방향으로 이동하는 애니메이션(Run_NE)이 강하게 동작할 것이다.
- 대각선은 0.7 기준으로 사용하는 이유
- 방향 벡터의 길이는 1이므로 두 방향 벡터 끼리 정규화 한 길이가 대략 0.7임
- 플레이어의 움직임, 즉 들어오는 Horizontal Move, Vertical Move 값에 따라 이 애니메이션들을 적절히 섞어 사용한다.
- 앞,뒤,좌,우,대각선(앞좌, 앞우, 뒤좌, 뒤우) 총 8 개의 애니메이션. (Idle 포함하면 9개)
Aim Layer
- Angle 파라미터를 사용
- 상체를 아래나 위로 회전하는 애니메이션
- 카메라가 향하는 방향과 플레이어가 조준하는 방향을 일치하게 한다.
- IK Pass 를 체크
- Upper Body Mask 적용
- 상체에 대해서만 애니메이션 적용
- Blending을 Overriding이 아닌 Additive
- 아래에 있는 Base Layer를 완전히 덮어 씌우지 않도록 하고 상체 위아래를 숙여도 Base Layer와 함께 애니메이션 될 수 있도록 한다.
Aiming
State- 현재 지정 되어있는 애니메이션 클립
Aim_Mid
파일은 플레이어가 아래로 숙이는 것으로 시작하여 곧 이어 허리를 들어 위를 보는 애니메이션 파일이다.- 첫 프레임은 땅을 보되 끝 프레임은 하늘을 보며 끝나는 모션 애니메이션.
- 중간 프레임은 정면을 바라보는 모션
- 이 하나의 애니메이션 클립 파일 내에서 쪼개서 지정하면 된다. 처음~ 몇초까지는 허리 숙이는 애니메이션으로 사용. 이런식으로!
- Normalized Time에 현재 Angle 파라미터가 지정되어 있다.
- Angle 값이 0.4 이면 위 애니메이션 클립 전체 길이의 40 % 지점이 재생 시점이된다. 즉, 파라미터 값에 따라 해당 애니메이션 클립의 현재 재생 시점을 결정하는 것이다.
- Angle 값이 0 으로 들어오면
Aim_Mid
클립의 아래를 숙이는 시점이 재생될 것이고 Angle 값이 1 이면Aim_Mid
클립의 위를 보는 시점이 재생될 것.
- Normalized Time에 현재 Angle 파라미터가 지정되어 있다.
- 현재 지정 되어있는 애니메이션 클립
Shooting Layer
- Reload, Shoot 파라미터 사용
- 총기 반동, 재장전 애니메이션 적용
- Upper Body Mask 적용
- 상체에 대해서만 애니메이션 적용
- Blending을 Overriding이 아닌 Additive
- IK PASS 를 사용하지 않는다.
- IK PASS를 사용하면 총을 쐈을 때 팔이 흔들리는 모션이 IK에 의해서 덮어 씌워질 수 있기 때문에.
- 재장전 할때도 애니메이션에 의해 재장전 모션을 취하는 팔이 IK에 의해서 덮어 씌워져 가만히 있게 죈다.
- IK PASS를 사용하면 총을 쐈을 때 팔이 흔들리는 모션이 IK에 의해서 덮어 씌워질 수 있기 때문에.
Idle
State- 아무런 클립이 할당되있지 않음.
- 뭐 애니메이션 하는게 없기 때문에 Idle 상태에서는 더 하위 레이어인 Base 레이어의 애니메이션이 적용 된다.
- 아무런 클립이 할당되있지 않음.
Idle
👉Shoot
Transition- 조건에 Shoot 트리거가 할당되어 있다.
- 즉
Shoot
Trigger가 True가 되면 이 트랜지션이 발생하여Idle
👉Shoot
로 상태가 변하며 총을 쏘는 애니메이션 클립이 재생될 것.- Trigger는 True가 되자마자 다시 False로 바뀌는 성질을 가진다. (Bool과 다른 점!)
- 즉
- 조건에 Shoot 트리거가 할당되어 있다.
Shoot
👉Shoot
Transition- 즉, 자기 자신으로 가는 트랜지션
- Shoot 상태 아래에 있는 조그만 삼각형!
- 총을 연사로 쏘는 바람에 총 쏘는 애니메이션 클립 재생이 끝나기도 전에 또
Shoot
Trigger가 들어온 경우에 발생하는 트랜지션이다.- 지연 시간이 없도록 duration, offset 을 0 으로 해두었다.
- 즉, 자기 자신으로 가는 트랜지션
Shoot
👉Idle
Transition- Has Exit Time 을 체크해주어 별다른 조건이 없어도 총을 쏘다가 Exit Time에 도달하면 Idle 상태로 되게끔.
Reload
도 마찬가지!
Die Layer
- Die 파라미터 사용
- 사망 애니메이션 적용
- 가장 상위 Layer
- Mask를 설정하지 않았기 때문에 모든 신체 부위에 애니메이션이 적용 된다.
- Overriding 하여 하위 레이어들이 사망 레이어가 덮어씌울 수 있도록 하자. 죽으면 죽는 애니메이션만 동작해야 하니까!
- IK PASS 를 사용하지 않는다.
Idle
State- 아무런 클립이 할당되있지 않음.
- 뭐 애니메이션 하는게 없기 때문에 Idle 상태에서는 더 하위 레이어인 Base 레이어의 애니메이션이 적용 된다.
- 아무런 클립이 할당되있지 않음.
Idle
👉Die
Transition- 조건에 Die 트리거가 할당되어 있다.
- 즉
Die
Trigger가 True가 되면 이 트랜지션이 발생하여Idle
👉Die
로 상태가 변하며 사망 애니메이션 클립이 재생될 것.
- 즉
- 조건에 Die 트리거가 할당되어 있다.
이제 애니메이션 상태도는 이렇게 완성 되었고, C# 스크립트로 적절한 파라미터를 주어 애니메이션 재생을 제어하면 된다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기