Unity Term Book
애니메이션 & UI

Animation Clip

Animation Clip은 애니메이션의 기본 단위로, 키프레임 시퀀스가 위치·회전·색 등 속성을 시간에 따라 바꿉니다. Curve·WrapMode·Animation Event와 Humanoid 리타깃 기초를 배우며 클립을 설계·기록·재생하는 입문형 학습 가이드입니다.

상상해 보세요...

Animation Clip은 전통 애니메이터의 필름 한 조각입니다. 중요한 키프레임(점프 시작, 정점, 착지)을 그리고, 소프트웨어가 중간을 보간합니다. 클립은 그 키프레임 집합입니다——「0.0초에 손이 A; 0.5초에 B; 1.0초에 다시 A」. Unity가 클립을 읽고 매 프레임 GameObject 속성을 갱신합니다.

개념 자세히

Animation Clip은 (.anim) 에셋으로, 속성마다 curves로 애니메이션을 저장합니다——Binding (컴포넌트 상의 속성 경로)과 AnimationCurve(접선이 있는 키프레임). 직렬화 가능한 속성이면 무엇이든 애니메이션할 수 있습니다: Transform 위치/회전/스케일, Material 색, float, bool, sprite, 심지어 prefab 참조까지.

Keyframe에는 값과 두 접선(in/out)이 있어 키 사이 Bezier를 만듭니다. 흔한 보간: Smooth(자동 접선), Linear(프레임 사이 직선), Constant(다음 키까지 유지——스프라이트 플립북). 클립에는 wrapMode 가 있습니다: Loop, PingPong, ClampForever, Once.

클립 출처는 둘입니다: Unity에서 생성(Animation 창, Record 모드) 또는 FBX에서 임포트(Unity가 파일에서 클립을 분할). Humanoid 릭에서는 클립이 Muscle system(정규화 본)을 쓰고 다른 스켈레톤으로 리타깃할 수 있습니다. Generic 릭은 로컬 본 경로에 바인딩합니다.

Animation Events는 강력합니다: 클립의 시각에 마커를 두고, Animator가 도달하면 컴포넌트의 C# 메서드가 발화합니다. 발소리 오디오, FX 스폰, 콤보 윈도우에 사용하세요.

Animation Clip 구조

Property
0.0s0.25s0.5s0.75s1.0s
Position.x
Position.y
Rotation.z
Scale
🔔 Events

FootStep

FootStep

Playhead:0.00s

실습 단계

1

Animation 창 열기

Window → Animation → Animation. GameObject를 선택 → 새 클립을 만들거나 드롭다운에서 기존 클립을 고릅니다.

2

키프레임 기록

Record(빨간 원)를 누름 → 플레이헤드를 이동 → Scene/Inspector에서 속성을 변경 → Unity가 키프레임을 기록합니다.

3

접선 조정

Curve 뷰 → 키프레임 우클릭 → Free/Flat/Linear/Constant 접선으로 커브 모양을 잡습니다.

4

Animation Events 추가

Timeline 바 → 우클릭 → Add Animation Event → 메서드 이름 입력. 메서드는 GameObject의 컴포넌트에 있어야 합니다.

5

Loop와 WrapMode 설정

Animation Clip 에셋 선택 → Inspector → Loop Time, Loop Pose(시작/끝 블렌드). 로코모션은 Loop Pose를 켜 이음새 끊김을 막습니다.

인터랙티브 시뮬레이터

다양한 보간 모드로 Animation Clip을 미리보기——이징을 골라 차이를 확인하세요.

CURVE PREVIEW

Time: 0.00sValue: 0.00Easing: Smooth

코드 예제

기본

AnimationCurve로 코드에서 Animation Clip 구축.

using UnityEngine;

public class ProceduralClip : MonoBehaviour
{
  void Start()
  {
      AnimationClip clip = new AnimationClip();
      clip.legacy = true; // Use with Animation (not Animator)

      // Curve: jump up then land in 1 second
      AnimationCurve curve = new AnimationCurve(
          new Keyframe(0f,   0f),    // t=0: position 0
          new Keyframe(0.5f, 3f),    // t=0.5: peak at 3
          new Keyframe(1f,   0f)     // t=1.0: back to 0
      );

      // Bind the curve to transform "localPosition.y"
      clip.SetCurve("", typeof(Transform),
          "localPosition.y", curve);

      // Play with the legacy Animation component
      Animation anim = gameObject.AddComponent<Animation>();
      anim.AddClip(clip, "jump");
      anim.Play("jump");
  }
}

코드 예제

고급

코드에서 Animation Events 처리——발소리와 콤보 윈도우.

using UnityEngine;

public class AnimationEventHandler : MonoBehaviour
{
  public AudioClip[] footstepSounds;
  AudioSource audioSrc;

  void Awake() => audioSrc = GetComponent<AudioSource>();

  // Called by an Animation Event when a foot hits the ground
  // (Method name must match the Event in the editor)
  void OnFootstep(AnimationEvent ev)
  {
      // ev.intParameter: 0 = left foot, 1 = right foot
      int foot = ev.intParameter;
      AudioClip sound = footstepSounds[
          Random.Range(0, footstepSounds.Length)];
      audioSrc.PlayOneShot(sound, 0.7f + foot * 0.1f);
  }

  // Callback when the combo window opens (set in the Attack clip)
  void OnComboWindowOpen()
  {
      Debug.Log("Combo window open!");
  }
}

📌 빠른 정리

  • 클립 = 속성 경로에 바인딩된 AnimationCurves
  • Keyframe = 값 + in/out 접선으로 이징
  • Animation Events: 클립 안의 시간 콜백
  • Loop Pose: 시작/끝 블렌드로 매끄러운 루프
  • Humanoid 클립은 리타깃; Generic은 특정 스켈레톤에 바인딩

⚠️ 흔한 실수

  • ❌ Animation Event가 절대 발화하지 않음

    Event 메서드 이름이 컴포넌트 메서드와 다르거나, 컴포넌트가 잘못된 GameObject에 있음

    ✅ 메서드 이름을 정확히 일치(대소문자 구분)시키고 수신 GameObject를 확인

  • ❌ 루프 클립이 이음새에서 끊김

    첫·마지막 키프레임 값이 일치하지 않음

    ✅ "Loop Pose"를 켜고 루트 모션을 고르게 유지