Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Moon_B 게임개발 공부 업적

[Unity] AnimationCurve 가이드 본문

Unity

[Unity] AnimationCurve 가이드

Moon_B 2025. 3. 26. 13:04

1. 개요

AnimationCurve는 Unity에서 키프레임을 사용하여 특정 값의 변화를 부드럽게 조절할 수 있도록 도와주는 클래스입니다. 주로 애니메이션, UI 인터랙션, 움직임 보정 등에 활용됩니다.

 

예시

  • 캐릭터의 이동 경로 보정
  • UI 애니메이션 (버튼 클릭 시 커브를 이용한 확대 효과 등)
  • 자연스러운 카메라 움직임
  • 적 AI의 속도 조절
  • 피드백 효과 (진동, 스케일 변화 등)

2. AnimationCurve의 구성 요소

2.1 키프레임 (Keyframe)

  • Keyframe은 시간과 값의 변화를 정의하는 개별적인 포인트입니다.
  • Keyframe(float time, float value) 형태로 생성됩니다.
  • 각 키프레임에는 inTangent, outTangent을 조정하여 보간 방식(Interpolation Mode)을 설정할 수 있습니다.
Keyframe key1 = new Keyframe(0f, 0f);  // 시간 0, 값 0  
Keyframe key2 = new Keyframe(1f, 2f);  // 시간 1, 값 2

2.2 보간 방식 (Interpolation Mode)

키프레임 간의 값을 어떻게 보간할 것인지 결정하는 방법입니다.

보간 방식설명

Linear 키프레임 사이의 값을 선형으로 보간
Smooth 부드러운 곡선을 생성
Constant 키프레임 값만 사용 (즉, 점프 형태)
Cubic Bezier 베지어 곡선을 사용하여 자연스럽게 보간

 

🛠 Unity의 AnimationCurve 기본 보간 방식은 Cubic Bezier입니다.

 


3. AnimationCurve 기본 사용법

3.1 AnimationCurve 생성 및 키프레임 추가

AnimationCurve curve = new AnimationCurve(
    new Keyframe(0f, 0f), 
    new Keyframe(1f, 2f), 
    new Keyframe(2f, 0f)
);
curve.AddKey(3f, 1f);  // 시간 3초, 값 1

3.2 특정 시간의 값 평가 (Evaluate)

Evaluate(float time)을 사용하면 해당 시간의 값을 보간하여 얻을 수 있습니다.

float value = curve.Evaluate(0.5f);  // 0.5초 시점의 값 반환

3.3 커브 조정하기

  • curve.keys 배열을 통해 키프레임을 직접 수정할 수 있습니다.
  • SmoothTangents(index, weight)을 사용하여 보간 곡선을 조정할 수도 있습니다.
curve.keys[1].value = 3f;  // 두 번째 키프레임 값을 변경
curve.SmoothTangents(1, 0.5f);  // 부드러운 곡선으로 조정

4. 실전 활용 예제

4.1 오브젝트의 자연스러운 움직임 적용

public class MoveWithCurve : MonoBehaviour
{
    public AnimationCurve moveCurve;  
    private float timeElapsed = 0f;

    void Update()
    {
        timeElapsed += Time.deltaTime;
        float newY = moveCurve.Evaluate(timeElapsed);
        transform.position = new Vector3(transform.position.x, newY, transform.position.z);
    }
}

4.2 UI 애니메이션 적용 (버튼 클릭 효과)

버튼을 클릭했을 때 크기가 부드럽게 변하도록 AnimationCurve를 적용할 수 있습니다.

 

예시

  • 버튼 클릭 시 살짝 커졌다가 원래 크기로 돌아오는 애니메이션
  • UI 요소가 등장할 때 자연스러운 애니메이션

5. AnimationCurve를 활용한 고급 테크닉

5.1 물리 기반 움직임 적용

AnimationCurve를 활용하면 캐릭터의 점프, 충돌 효과 등을 부드럽게 만들 수 있습니다.

Rigidbody rb;
public AnimationCurve jumpCurve;
void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Jump()
{
    StartCoroutine(JumpRoutine());
}

IEnumerator JumpRoutine()
{
    float duration = jumpCurve.keys[jumpCurve.length - 1].time;
    float time = 0f;

    while (time < duration)
    {
        time += Time.deltaTime;
        float force = jumpCurve.Evaluate(time);
        rb.AddForce(Vector3.up * force, ForceMode.Force);
        yield return null;
    }
}

 

예시

  • 점프 애니메이션을 더 부드럽게
  • 충돌 시 반동 효과 조정

6. 결론

Unity의 AnimationCurve단순한 애니메이션뿐만 아니라, 물리, UI, AI, 움직임 보정 등 다양한 게임 개발 요소에서 활용할 수 있는 강력한 도구입니다.

✨ 핵심 정리 ✨

✅ AnimationCurve는 시간에 따른 값 변화를 부드럽게 조절하는 데 유용하다.
✅ Evaluate()를 사용하면 특정 시간의 값을 얻을 수 있다.
✅ AddKey()를 통해 키프레임을 추가할 수 있다.
✅ UI 애니메이션, 캐릭터 이동, 물리 효과 등에 폭넓게 활용 가능하다.

💡 잘 활용하면 게임의 품질을 크게 향상시킬 수 있으니 적극적으로 사용해보세요! 🎮🔥

 

 

이글은 ChatGPT를 통해 작성하였습니다.