유니티 3D

유니티3D 모델이 애니메이션 앞부분 씹을때

ruripanda 2026. 4. 30. 13:12

유니티엔진6에서 캐릭터가 공격을 하는 애니메이션을 만들었어
그런데 애니메이션의 앞부분의 공격이 구현되지 않았어
3D모델링인데 뭐가 문제야?

 

유니티 6(Unity 6)에서 3D 캐릭터 애니메이션이 앞부분만 씹히거나 재생되지 않는 현상은 보통 애니메이션 수입(Import) 설정이나 스테이트 머신(Animator)의 전환 조건 문제일 확률이 높습니다.

문제를 해결하기 위해 다음 4가지를 순서대로 확인해 보세요.


1. 애니메이션 클립의 '시작 프레임' 확인

블렌더에서 내보낼 때 설정한 프레임 범위와 유니티에서 인식하는 범위가 다를 수 있습니다.

  • 유니티 Project 창에서 FBX 파일을 선택합니다.
  • Inspector 창 상단의 Animation 탭을 클릭합니다.
  • 하단의 Clips 리스트에서 해당 공격 애니메이션을 선택하고, Start 프레임이 제대로 설정되어 있는지 확인하세요. (간혹 0이 아닌 1이나 다른 숫자부터 시작하도록 잘려 있는 경우가 있습니다.)

2. 하부 구조(Root Transform) 설정 확인

공격 애니메이션의 앞부분에 캐릭터가 앞으로 전진하거나 몸을 크게 비트는 동작이 포함되어 있다면, 유니티가 이를 '데이터'로만 인식하고 '움직임'으로 표현하지 않을 수 있습니다.

  • 동일한 Animation 탭 설정창에서 아래로 스크롤하여 Root Transform Rotation, Root Transform Position (Y), Root Transform Position (XZ) 항목을 찾습니다.
  • Bake Into Pose 체크박스를 하나씩 체크/해제하며 미리보기 창에서 동작이 정상적으로 나오는지 확인해 보세요. 특히 공격 시 몸이 고정된 채 팔만 휘두른다면 이 설정이 원인일 수 있습니다.

3. 애니메이션 전환(Transition)의 'Has Exit Time' 문제

가장 흔한 원인 중 하나입니다. 대기(Idle) 상태에서 공격(Attack) 상태로 넘어갈 때 설정이 잘못되면 앞부분이 생략됩니다.

  • Animator 창에서 Idle -> Attack으로 가는 화살표(Transition)를 클릭합니다.
  • Settings를 열고 Fixed DurationTransition Duration(s) 값을 확인하세요.
  • Transition Duration 값이 너무 크면(예: 0.25 이상), 이전 애니메이션과 부드럽게 연결하기 위해 공격 애니메이션의 앞부분 25%를 잘라먹고 섞어버립니다.
    • 해결법: 이 값을 0에 가깝게 줄이거나, 즉각적인 반응을 원한다면 Has Exit Time을 체크 해제하세요.

4. 리깅(Rig) 타입 매칭 확인

블렌더에서 만든 모델이 'Humanoid'인지 'Generic'인지에 따라 애니메이션 해석 방식이 다릅니다.

  • FBX 파일의 Rig 탭에서 Animation Type을 확인하세요.
  • 만약 리깅 구조가 유니티의 Humanoid 아바타 기준에 완벽히 맞지 않으면 특정 관절의 초기 동작이 무시될 수 있습니다. 특별한 이유가 없다면 Generic으로 테스트해 보고 문제가 해결되는지 확인해 보세요.

💡 추가 팁: 스크립트 호출 시점

만약 애니메이션을 스크립트(animator.Play() 혹은 animator.SetTrigger())로 실행하고 있다면, 공격 버튼을 누르는 순간 다른 로직에 의해 애니메이션이 즉시 덮어씌워지거나 취소되는지 로그를 찍어 확인해 보는 것이 좋습니다.

지금 만드시는 몬스터 사냥 시스템에서 캐릭터가 무기를 휘두를 때 애니메이션 이벤트(Animation Event)를 사용해 공격 판정을 넣으실 계획인가요? 그렇다면 애니메이션 시작 지점에 이벤트가 너무 붙어 있어도 프레임 드랍 시 실행되지 않을 수 있으니 주의해야 합니다.

 

 

 

왼쪽의 인스펙터 창을 보자

Has Exit Time

는 애니메이션이 끝까지 재생되게 하는 것이고

 

Exit Time를

1로 만들어서 애니메이션 프레임이 겹치지 않게하고

 

Transition Duration(s)를

0으로 만들어서 이전 애니메이션에서 블렌딩이 안되고 바로 애니메이션이 실행되게 하자