Unity Chapter 11-4. 좀비 TPS 게임 만들기 : Player Animation

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!


Chapter 11. 좀비 TPS 게임 만들기

🔔 Player Animation

Player Character 오브젝트의 애니메이션 설정 (Animator 컴포넌트)

  • Animator 컴포넌트
    • Apply Root Motion 을 체크 해제해준다.
      • 루트 모션이 아니라 코드를 통하여 통제할 것이기 때문
        • 루트 모션을 체크하면 애니메이션에 의해서 오브젝트의 실제 좌표값이 변경된다.
        • 해제하면 코드에 의해서 오브젝트의 실제 좌표값을 통제한다.
      • 루트 모션 포스트 참고
    • 📂Animations/Shooter Animator 애니메이션 컨트롤러Player Character 오브젝트의 Animator 컴포넌트Controller에 드래그 앤 드롭 해준다.


애니메이션 컨트롤러

애니메이션 클립들은 📂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

레이어, IK 포스트 참고

Base Layer
  • image
  • Vertical Move, Horizontal Move 파라미터를 사용
  • 정지 & 기본 이동 애니메이션
  • IK Pass 를 체크
    • Base Layer는 최 하단에 있는 Layer이므로 제일 밑에서 덮어 씌우기 당하는 Layer다.
    • 따라서 장전이나 총쏘는 애니메이션을 담당하는 상위 Layer에서 관절을 움직이면(IK) 기본 이동 애니메이션을 담당하는 Base Layer에도 이게 덮어씌워 적용되야 하므로 IK PASS 에 체크!
  • Movement 블렌딩 트리
    • image
    • 앞,뒤,좌,우,대각선(앞좌, 앞우, 뒤좌, 뒤우) 총 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임
Aim Layer
  • image
  • Angle 파라미터를 사용
  • 상체를 아래나 위로 회전하는 애니메이션
    • 카메라가 향하는 방향과 플레이어가 조준하는 방향을 일치하게 한다.
  • IK Pass 를 체크
  • Upper Body Mask 적용
    • 상체에 대해서만 애니메이션 적용
  • Blending을 Overriding이 아닌 Additive
    • 아래에 있는 Base Layer를 완전히 덮어 씌우지 않도록 하고 상체 위아래를 숙여도 Base Layer와 함께 애니메이션 될 수 있도록 한다.
  • Aiming State
    • 현재 지정 되어있는 애니메이션 클립 Aim_Mid파일은 플레이어가 아래로 숙이는 것으로 시작하여 곧 이어 허리를 들어 위를 보는 애니메이션 파일이다.
      • 첫 프레임은 땅을 보되 끝 프레임은 하늘을 보며 끝나는 모션 애니메이션.
      • 중간 프레임은 정면을 바라보는 모션
      • 이 하나의 애니메이션 클립 파일 내에서 쪼개서 지정하면 된다. 처음~ 몇초까지는 허리 숙이는 애니메이션으로 사용. 이런식으로!
        • image
        • Normalized Time에 현재 Angle 파라미터가 지정되어 있다.
          • Angle 값이 0.4 이면 위 애니메이션 클립 전체 길이의 40 % 지점이 재생 시점이된다. 즉, 파라미터 값에 따라 해당 애니메이션 클립의 현재 재생 시점을 결정하는 것이다.
          • Angle 값이 0 으로 들어오면 Aim_Mid클립의 아래를 숙이는 시점이 재생될 것이고 Angle 값이 1 이면 Aim_Mid클립의 위를 보는 시점이 재생될 것.
Shooting Layer
  • image
  • Reload, Shoot 파라미터 사용
  • 총기 반동, 재장전 애니메이션 적용
  • Upper Body Mask 적용
    • 상체에 대해서만 애니메이션 적용
  • Blending을 Overriding이 아닌 Additive
  • IK PASS 를 사용하지 않는다.
    • IK PASS를 사용하면 총을 쐈을 때 팔이 흔들리는 모션이 IK에 의해서 덮어 씌워질 수 있기 때문에.
      • 재장전 할때도 애니메이션에 의해 재장전 모션을 취하는 팔이 IK에 의해서 덮어 씌워져 가만히 있게 죈다.
  • Idle State
    • 아무런 클립이 할당되있지 않음.
      • 뭐 애니메이션 하는게 없기 때문에 Idle 상태에서는 더 하위 레이어인 Base 레이어의 애니메이션이 적용 된다.
  • Idle 👉 Shoot Transition
    • 조건에 Shoot 트리거가 할당되어 있다.
      • Shoot Trigger가 True가 되면 이 트랜지션이 발생하여 Idle 👉 Shoot로 상태가 변하며 총을 쏘는 애니메이션 클립이 재생될 것.
        • Trigger는 True가 되자마자 다시 False로 바뀌는 성질을 가진다. (Bool과 다른 점!)
  • Shoot 👉 Shoot Transition
    • 즉, 자기 자신으로 가는 트랜지션
      • Shoot 상태 아래에 있는 조그만 삼각형!
    • 총을 연사로 쏘는 바람에 총 쏘는 애니메이션 클립 재생이 끝나기도 전에 또 Shoot Trigger가 들어온 경우에 발생하는 트랜지션이다.
      • 지연 시간이 없도록 duration, offset 을 0 으로 해두었다.
  • Shoot 👉 Idle Transition
    • Has Exit Time 을 체크해주어 별다른 조건이 없어도 총을 쏘다가 Exit Time에 도달하면 Idle 상태로 되게끔.
  • Reload도 마찬가지!
Die Layer
  • image
  • Die 파라미터 사용
  • 사망 애니메이션 적용
  • 가장 상위 Layer
  • Mask를 설정하지 않았기 때문에 모든 신체 부위에 애니메이션이 적용 된다.
  • Overriding 하여 하위 레이어들이 사망 레이어가 덮어씌울 수 있도록 하자. 죽으면 죽는 애니메이션만 동작해야 하니까!
  • IK PASS 를 사용하지 않는다.
  • Idle State
    • 아무런 클립이 할당되있지 않음.
      • 뭐 애니메이션 하는게 없기 때문에 Idle 상태에서는 더 하위 레이어인 Base 레이어의 애니메이션이 적용 된다.
  • Idle 👉 Die Transition
    • 조건에 Die 트리거가 할당되어 있다.
      • Die Trigger가 True가 되면 이 트랜지션이 발생하여 Idle 👉 Die로 상태가 변하며 사망 애니메이션 클립이 재생될 것.

이제 애니메이션 상태도는 이렇게 완성 되었고, C# 스크립트로 적절한 파라미터를 주어 애니메이션 재생을 제어하면 된다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기


Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기