Moon_B 게임개발 공부 업적
[Unity] AnimationCurve 가이드 본문
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를 통해 작성하였습니다.