Unity & C#

[유니티] 왜 이제 알았을까 요놈 Animation Curve

왼손잡이개발자 2021. 12. 16. 23:35

최근 개발 중 쪼~~끔 수학 머리를 사용해서 수학 공식을 생각해서 특정 기능을 개발해야하는 순간이 있었는데 수학에 너무 약하기 때문에 고심하고 있을 때 지인 개발자께서 Animation Curve를 사용해보라는 제안을 하셨습니다. Animatin Curve는 존재 자체만 알고있었지 실제로 써본 적이 없었는데 이번에 써보면 너허어어어어무나 유용한 친구인 것을 깨닫게 되었습니다. 보통 수학 공식으로 결과값을 도출 해 내야 하는 경우에 Animation Curve를 쓰면 너무 유용할 것 같습니다. 

 

아래 코드는 AnimationCurve를 사용해서 sphere의 움직임을 wave 처럼 움직이게 한 아주 심플한 예제 코드입니다.

using UnityEngine;

namespace AnimationCurvePractice
{
    public class MoverWithAnimationCurve : MonoBehaviour
    {
        [SerializeField] private AnimationCurve x_animationCurve;
        [SerializeField] private AnimationCurve y_animationCurve;

        private float curTime;
        [SerializeField] private float period = 2f;


        void Update()
        {
            curTime += Time.deltaTime;
            if (curTime >= period)
            {
                curTime -= curTime;
            }


            float xValue = x_animationCurve.Evaluate(curTime);
            float yValue = y_animationCurve.Evaluate(curTime);

            transform.position = new Vector3(xValue, yValue, 0);
        }
    }

}

curTime이 period 만큼 지나게 되면 다시 0으로 바뀌게 됩니다 (curTime -= curTime) 이게 update로 계속 돌고 있습니다. 그리고 이 curTime은 animation curve에서 input 값으로 들어가게됩니다. 위 코드에서는 animation curve가 2개가 있는데 각각 sphere의 x 포지션과 y 포지션을 계산해 줍니다. 아래 사진은 각각 x 값 담당 animation curve와 y 값 담당 animation curve 입니다. 

x 값 animation curve
y 값 담당 animation curve

 

 

실행을 해보면 아래 동영상과 같이 플레이 됩니다. 실시간으로 animation curve의 graph 모양을 바꿔서 다양하게 연출을 해볼 수도 있겠네요

 

animation curve practive video

 

앞으로 animation curve를 다양하게 써봐야겠네요