03 애니메이션 - jes79/Unity-AI-Glossary-Playground GitHub Wiki
03 애니메이션
Animator의 '파라미터 이름'과 '언제 바뀌는지'를 함께 적으면 코드와 설정이 정확히 맞물립니다.
씬 14개 · 폴더 Assets/00_Scenes/03_Animation
| 번호 | 용어 | 쉽게 말하면 | 씬에서 보여 주는 것 | 구현 방식 |
|---|---|---|---|---|
| 0301 | Animator Controller | 애니메이션 상태를 관리하는 그래프 | Idle/Run/Jump 컨트롤러를 A/D·Space로 조작, 현재 상태 강조 | 런타임 데모 |
| 0302 | State / Transition | 상태와 상태 사이 전환 | Run→Jump 전환의 Has Exit Time ON/OFF 반응 지연 비교 | 런타임 데모 |
| 0303 | Parameter (Float, Bool, Trigger) | 코드에서 애니메이션을 바꾸는 스위치 | Speed(Float)·IsGrounded(Bool)·Attack(Trigger) 스크립트 제어 | 런타임 데모 |
| 0304 | Blend Tree | 속도에 따라 걷기→뛰기를 자연스럽게 섞음 | Speed로 Idle-Walk-Run 1D Blend Tree vs 딱딱한 전환 비교 | 런타임 데모 |
| 0305 | Animation Event | 애니메이션 특정 프레임에 함수 실행 | 공격 클립 12프레임 Animation Event로 데미지 판정 | 런타임 데모 |
| 0306 | Animation Layer / Avatar Mask | 상체·하체 애니메이션 분리 | 상체 Avatar Mask 레이어로 뛰면서 상체만 사격 | 런타임 데모 |
| 0307 | Root Motion | 애니메이션 자체 움직임으로 이동 | 구르기는 Root Motion, 걷기는 코드 이동 | 런타임 데모 |
| 0308 | Humanoid / Retargeting | 다른 캐릭터 애니메이션 재사용 | 본 이름 매핑으로 체형 다른 리그에 리타게팅, Mixamo→Humanoid 절차 설명 | 설명 + 대체 구현 |
| 0309 | IK (Inverse Kinematics) | 손·발을 목표 위치에 맞춤 | 계단에서 Raycast + 2본 IK로 발 붙이기, OnAnimatorIK 코드 설명 | 설명 + 대체 구현 |
| 0310 | 스프라이트 애니메이션 / Sprite Sheet | 2D 그림을 프레임으로 넘김 | 코드로 그린 8프레임 시트를 잘라 걷기 애니메이션 재생 | 런타임 데모 |
| 0311 | 2D 본 애니메이션 (2D Animation 패키지) | 2D 그림에 뼈를 심어 움직임 | SpriteRenderer 본 계층 애니메이션, 2D Animation 패키지 절차 설명 | 설명 + 대체 구현 |
| 0312 | Timeline | 컷신·연출 편집기 | 코드로 만든 Timeline 보스 등장 컷신(카메라·대사·사운드) | 런타임 데모 |
| 0313 | 트윈 (Tween, DOTween) | 코드로 위치·크기·색을 부드럽게 변화 | 0.2초 펀치 스케일 미니 트윈, DOTween 대응 코드 설명 | 설명 + 대체 구현 |
| 0314 | 히트스톱 (Hit Stop) | 타격 순간 아주 잠깐 정지 | 타격 시 Time.timeScale 0으로 0.05초 히트스톱 | 런타임 데모 |
항목별 상세
0301
Animator Controller — 애니메이션 상태를 관리하는 그래프
요청 예문: "Idle, Run, Jump 상태를 가진 Animator Controller 구성을 알려줘."
- 씬:
Assets/00_Scenes/03_Animation/0301_AnimatorController.unity - 핵심 스크립트:
AnimatorControllerDemo, AnimatorStateDisplay - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0301_AnimatorController.cs - 구현 방식: 런타임 데모
- 개념: 애니메이션 상태와 전환 조건을 그래프로 묶어 둔 에셋. 코드는 파라미터 값만 바꾸고, 어떤 클립을 언제 재생할지는 그래프가 결정한다. Animator 컴포넌트에 물려 쓴다.
- 씬에서 보여 주는 것: Idle/Run/Jump 컨트롤러를 A/D·Space로 조작, 현재 상태 강조
- 확인 포인트: A/D 와 Space 로 움직이며 Idle → Run → Jump 상태가 바뀌는지, 패널에 표시되는 현재 상태 이름이 조작과 맞게 강조되는지 보세요.
0302
State / Transition — 상태와 상태 사이 전환
요청 예문: "Run에서 Jump로 바로 넘어가게 Transition의 Has Exit Time을 끄는 법 알려줘."
- 씬:
Assets/00_Scenes/03_Animation/0302_StateTransition.unity - 핵심 스크립트:
StateTransitionDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0302_StateTransition.cs - 구현 방식: 런타임 데모
- 개념: 상태와 상태를 잇는 화살표. 조건(Condition), 전환 시간(Duration), 현재 클립을 끝까지 재생할지(Has Exit Time)를 정한다. Has Exit Time 을 켠 채로 두면 입력이 늦게 반응하는 흔한 원인이 된다.
- 씬에서 보여 주는 것: Run→Jump 전환의 Has Exit Time ON/OFF 반응 지연 비교
- 확인 포인트: Run 중에 Space 를 눌러 보세요. Has Exit Time 을 켜면 현재 클립이 끝날 때까지 기다려 점프가 늦게 나가고, 끄면 즉시 전환됩니다. 두 Animator 를 나란히 비교할 수 있습니다.
0303
Parameter (Float, Bool, Trigger) — 코드에서 애니메이션을 바꾸는 스위치
요청 예문: "Speed(Float), IsGrounded(Bool), Attack(Trigger) 파라미터를 스크립트로 제어해줘."
- 씬:
Assets/00_Scenes/03_Animation/0303_AnimatorParameters.unity - 핵심 스크립트:
AnimatorParameterDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0303_AnimatorParameters.cs - 구현 방식: 런타임 데모
- 개념: Animator 그래프가 읽는 변수. Float 는 속도처럼 연속값, Bool 은 땅에 닿았는지 같은 상태, Trigger 는 공격처럼 한 번만 발생하는 신호에 쓴다. 코드에서 SetFloat/SetBool/SetTrigger 로 넣는다.
- 씬에서 보여 주는 것: Speed(Float)·IsGrounded(Bool)·Attack(Trigger) 스크립트 제어
- 확인 포인트: 이동하면 Speed(Float)가 변하고, 점프하면 IsGrounded(Bool)가 false 가 되며, 공격 키를 누르면 Attack(Trigger)이 한 프레임만 켜졌다 사라지는지 패널에서 보세요.
0304
Blend Tree — 속도에 따라 걷기→뛰기를 자연스럽게 섞음
요청 예문: "Speed 값으로 Idle-Walk-Run을 섞는 1D Blend Tree를 만들어줘."
- 씬:
Assets/00_Scenes/03_Animation/0304_BlendTree.unity - 핵심 스크립트:
BlendTreeDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0304_BlendTree.cs - 구현 방식: 런타임 데모
- 개념: 하나의 파라미터 값에 따라 여러 클립을 비율로 섞어 재생하는 노드. 걷기와 뛰기를 속도에 맞춰 자연스럽게 잇거나, 방향별 이동을 2D 로 섞는 데 쓴다.
- 씬에서 보여 주는 것: Speed로 Idle-Walk-Run 1D Blend Tree vs 딱딱한 전환 비교
- 확인 포인트: 이동 속도를 천천히 올려 Idle → Walk → Run 이 끊김 없이 섞이는지 보세요. 오른쪽의 일반 Transition 캐릭터는 같은 구간에서 딱딱하게 바뀝니다.
0305
Animation Event — 애니메이션 특정 프레임에 함수 실행
요청 예문: "공격 애니메이션 12프레임에 Animation Event로 데미지 판정을 넣어줘."
- 씬:
Assets/00_Scenes/03_Animation/0305_AnimationEvent.unity - 핵심 스크립트:
AnimationEventDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0305_AnimationEvent.cs - 구현 방식: 런타임 데모
- 개념: 애니메이션 클립의 특정 프레임에 함수 호출을 심는 기능. 공격 판정, 발소리, 이펙트 생성을 모션과 정확히 맞출 수 있어 코드에서 시간을 세는 방식보다 정확하다.
- 씬에서 보여 주는 것: 공격 클립 12프레임 Animation Event로 데미지 판정
- 확인 포인트: 공격을 해 보세요. 클립 12프레임에 심어 둔 이벤트가 불리는 순간 데미지 판정과 로그가 찍힙니다. 모션보다 이르거나 늦지 않은지 타임라인 표시와 함께 보세요.
0306
Animation Layer / Avatar Mask — 상체·하체 애니메이션 분리
요청 예문: "뛰면서 상체만 총 쏘는 동작이 되게 Avatar Mask 레이어를 만들어줘."
- 씬:
Assets/00_Scenes/03_Animation/0306_AnimationLayerAvatarMask.unity - 핵심 스크립트:
AvatarMaskDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0306_AnimationLayerAvatarMask.cs - 구현 방식: 런타임 데모
- 개념: 여러 애니메이션을 층으로 겹쳐 재생하고, Avatar Mask 로 어느 뼈에 적용할지 지정하는 기능. 하체는 달리기, 상체는 사격처럼 부위별로 다른 동작을 동시에 하게 만든다.
- 씬에서 보여 주는 것: 상체 Avatar Mask 레이어로 뛰면서 상체만 사격
- 확인 포인트: 달리면서 사격해 보세요. 하체는 달리기 모션을 유지하고 상체만 사격 모션으로 바뀝니다. Mask 를 끄면 전신이 사격 모션으로 덮여 달리기가 사라집니다.
0307
Root Motion — 애니메이션 자체 움직임으로 이동
요청 예문: "구르기 동작에 Root Motion을 쓰고 나머지는 코드로 이동하게 해줘."
- 씬:
Assets/00_Scenes/03_Animation/0307_RootMotion.unity - 핵심 스크립트:
RootMotionDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0307_RootMotion.cs - 구현 방식: 런타임 데모
- 개념: 애니메이션 클립에 기록된 이동량을 캐릭터의 실제 이동으로 쓰는 방식. 구르기·공격 전진처럼 모션과 이동이 정확히 맞아야 할 때 자연스럽지만, 코드로 속도를 제어하기는 어려워진다.
- 씬에서 보여 주는 것: 구르기는 Root Motion, 걷기는 코드 이동
- 확인 포인트: 구르기(Root Motion)와 걷기(코드 이동)를 번갈아 해 보세요. 구르기는 발이 밀리지 않고 모션 그대로 이동하는데, 코드 이동은 발이 미끄러질 수 있습니다.
0308
Humanoid / Retargeting — 다른 캐릭터 애니메이션 재사용
요청 예문: "Mixamo 애니메이션을 Humanoid로 설정해서 내 캐릭터에 리타게팅해줘."
- 씬:
Assets/00_Scenes/03_Animation/0308_HumanoidRetargeting.unity - 핵심 스크립트:
BoneRetargeter - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0308_HumanoidRetargeting.cs - 구현 방식: 설명 + 대체 구현
- 개념: 사람 형태 리그를 Unity 표준 뼈(Humanoid)로 매핑해, 체형이 다른 캐릭터끼리 같은 애니메이션을 돌려 쓰는 기능. Mixamo 등 외부 애니메이션을 내 캐릭터에 붙일 때 쓴다.
- 씬에서 보여 주는 것: 본 이름 매핑으로 체형 다른 리그에 리타게팅, Mixamo→Humanoid 절차 설명
- 확인 포인트: 본 이름 매핑으로 체형이 다른 두 리그에 같은 동작이 적용되는지 보세요. 패널에 실제 작업 절차(FBX Rig > Animation Type > Humanoid, Avatar 설정)가 단계별로 적혀 있습니다.
0309
IK (Inverse Kinematics) — 손·발을 목표 위치에 맞춤
요청 예문: "계단에서 발이 바닥에 붙도록 Foot IK를 적용해줘."
- 씬:
Assets/00_Scenes/03_Animation/0309_InverseKinematics.unity - 핵심 스크립트:
FootIKDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0309_InverseKinematics.cs - 구현 방식: 설명 + 대체 구현
- 개념: 뼈의 회전을 직접 주는 대신 손·발의 목표 위치를 주고 중간 관절을 거꾸로 계산하는 방식. 계단에서 발 붙이기, 벽 짚기, 무기 양손 잡기 같은 상황 보정에 쓴다.
- 씬에서 보여 주는 것: 계단에서 Raycast + 2본 IK로 발 붙이기, OnAnimatorIK 코드 설명
- 확인 포인트: 계단·경사를 걸어 보세요. Raycast 로 찾은 바닥 높이에 발이 붙어 공중에 뜨거나 파묻히지 않습니다. IK 를 끄면 발이 계단을 뚫고 들어갑니다.
0310
스프라이트 애니메이션 / Sprite Sheet — 2D 그림을 프레임으로 넘김
요청 예문: "8프레임 스프라이트 시트를 잘라서 걷기 애니메이션을 만들어줘."
- 씬:
Assets/00_Scenes/03_Animation/0310_SpriteSheetAnimation.unity - 핵심 스크립트:
SpriteSheetDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0310_SpriteSheetAnimation.cs - 구현 방식: 런타임 데모
- 개념: 한 장의 이미지에 여러 프레임을 늘어놓고 차례로 보여 주는 2D 애니메이션. Sprite Editor 로 자른 뒤 Animation 클립으로 묶으며, 프레임 수와 재생 속도로 느낌이 결정된다.
- 씬에서 보여 주는 것: 코드로 그린 8프레임 시트를 잘라 걷기 애니메이션 재생
- 확인 포인트: 코드로 그린 8프레임 시트가 잘려 걷기 애니메이션으로 재생되는지 보세요. 재생 속도를 바꾸면 같은 그림인데 걷는 속도가 달라집니다.
0311
2D 본 애니메이션 (2D Animation 패키지) — 2D 그림에 뼈를 심어 움직임
요청 예문: "2D Animation 패키지로 캐릭터 팔다리에 본을 넣는 법 알려줘."
- 씬:
Assets/00_Scenes/03_Animation/0311_Bone2DAnimation.unity - 핵심 스크립트:
Bone2DDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0311_Bone2DAnimation.cs - 구현 방식: 설명 + 대체 구현
- 개념: 2D 그림에 뼈를 심고 메시를 변형해 움직이는 방식. 프레임을 일일이 그리지 않고 부드러운 동작을 만들 수 있어, 프레임 수가 많은 캐릭터에 유리하다.
- 씬에서 보여 주는 것: SpriteRenderer 본 계층 애니메이션, 2D Animation 패키지 절차 설명
- 확인 포인트: SpriteRenderer 본 계층이 부모-자식으로 회전하며 팔다리가 움직이는지 보세요. 패널에 실제 2D Animation 패키지로 뼈를 심는 절차가 적혀 있습니다.
0312
Timeline — 컷신·연출 편집기
요청 예문: "Timeline으로 보스 등장 컷신(카메라 이동+대사+사운드)을 만들어줘."
- 씬:
Assets/00_Scenes/03_Animation/0312_Timeline.unity - 핵심 스크립트:
TimelineCutsceneDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0312_Timeline.cs - 구현 방식: 런타임 데모
- 개념: 여러 오브젝트의 애니메이션·카메라·오디오를 시간축에 배치해 연출을 만드는 편집기. 컷신, 보스 등장, 스크립트 이벤트 연출에 쓴다.
- 씬에서 보여 주는 것: 코드로 만든 Timeline 보스 등장 컷신(카메라·대사·사운드)
- 확인 포인트: 컷신을 재생해 카메라 이동 · 대사 · 사운드가 시간축 위에서 함께 진행되는지 보세요. 중간에 멈추고 다시 재생해도 순서가 흐트러지지 않습니다.
0313
트윈 (Tween, DOTween) — 코드로 위치·크기·색을 부드럽게 변화
요청 예문: "DOTween으로 버튼을 누르면 0.2초 커졌다 작아지는 펀치 효과를 줘."
- 씬:
Assets/00_Scenes/03_Animation/0313_Tween.unity - 핵심 스크립트:
MiniTween, TweenDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0313_Tween.cs - 구현 방식: 설명 + 대체 구현
- 개념: 위치·크기·색 같은 값을 시작값에서 끝값으로 시간에 따라 보간해 주는 기법. Easing 곡선으로 느낌을 바꾸며, UI 연출처럼 애니메이션 클립을 만들기 번거로운 곳에 쓴다.
- 씬에서 보여 주는 것: 0.2초 펀치 스케일 미니 트윈, DOTween 대응 코드 설명
- 확인 포인트: 버튼을 눌러 0.2초 펀치 스케일을 보세요. 커졌다 되돌아오는 곡선이 선형이 아니라 탄력 있게 움직입니다. 패널의 DOTween 대응 코드와 비교해 보세요.
0314
히트스톱 (Hit Stop) — 타격 순간 아주 잠깐 정지
요청 예문: "공격이 맞으면 0.05초 Time.timeScale을 0으로 해서 히트스톱을 넣어줘."
- 씬:
Assets/00_Scenes/03_Animation/0314_HitStop.unity - 핵심 스크립트:
HitStopDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/03_Animation/Build0314_HitStop.cs - 구현 방식: 런타임 데모
- 개념: 타격이 맞는 순간 아주 짧게(0.03~0.1초) 시간을 멈춰 충격을 강조하는 연출. 타격감을 올리는 가장 값싼 방법이지만 길어지면 조작이 끊기는 느낌이 된다.
- 씬에서 보여 주는 것: 타격 시 Time.timeScale 0으로 0.05초 히트스톱
- 확인 포인트: 적을 때려 맞는 순간 화면 전체가 0.05초 정지하는지 보세요. 끄고 때려 보면 같은 모션인데 타격이 가볍게 느껴집니다.