IT공부

[Unity] 사인 곡선을 활용한 진동 표현 이해하기

shine94 2025. 7. 1. 20:33

* 진동

   어떤 물체가 중심값을 기준으로 좌우 또는 위아래로 반복적으로 움직이는 현상을 의미한다

 

   [유니티에서 진동은 언제 쓰일까?]

   오브젝트 좌우로 흔들기

   ㄴ x = base + sin(theta)

 

   위아래로 둥둥 뜨게 하기

   ㄴ y = base + sin(theta)

 

   크기나 색 등을 부드럽게 바꾸기

   ㄴ scale = 1 + sin(theta) * 0.2f

 

* delta(델타)

   변화량

   수학, 물리, 프로그래밍에서 델타는 값이 얼마나 변했는지(차이)를 뜻한다

   변화된 값 또는 이전 값과의 차이를 의미하는 접두어로 많이 사용한다

 

   [예]

   deltaTime

   시간의 변화량, 한 프레임 동안 흐른 시간(초)

 

   deltaPosition

   위치의 변화량


   deltaAngle

   회전각의 변화량

 

* 왜 삼각함수가 진동과 연관이 있을까?

   sin, cos는 삼각형에서 시작했지만, 원 위에서 점이 움직이는 패턴이다

 

   시간에 따라

   sin(θ) → 아래에서 시작 → 올라갔다 내려가고를 반복

   cos(θ) → 위에서 시작 → 내려갔다가 올라가고를 반복

 

   [그럼 탄젠트는!?]

   tan(θ) = sin(θ) / cos(θ)

   기울기(= 기울어진 정도)를 나타내며, 진동 표현에는 일반적으로 사용되지 않는다

   회전각, 시야 각도 계산, 카메라 시선 처리 등에 더 많이 쓰인다

   (+) tan(θ)는 π/2와 같은 특정 각도에서 값이 무한대로 발산하기 때문에, 진동 표현에는 부적합하다

 

* 탄젠트와 사인과 코사인의 차이는 명확한데 사인과 코사인은 헷갈린다! 😢

   둘 다 주기 함수고 -1 ~ 1 사이의 값을 주기적으로 반복한다

   둘 다 진동 구현에 똑같이 쓸 수 있다

 

   [차이점은 위상 차이다(phase difference)]

   사인은 0에서 시작해서 위로 올라가고

   코사인은 1에서 시작해서 내려간다

 

θ sin(θ) cos(θ)
0 0 1
π/2 1 0
π 0 -1
3π/2 -1 0
0 1

 

   [따라서]

   사인과 코사인은 본질적으로 동일한 형태의 함수이며, 단지 시작 시점(위상)이 다르다

   크게 다르다라고 느껴질 상황은 거의 없고 동일한 진동 기능을 수행할 수 있다

 

   [그래도 굳이 실전에서 차이를 느끼고 싶다면......?]

   (1) 움직임의 시작 위치를 명확하게 연출할 때

         등장하자마자 위에서부터 떨어져야 한다면 → 코사인

         중앙에서 부드럽게 시작해야 한다면 → 사인

         이럴 때는 시각적으로 차이가 느껴질 수 있다

   (2) 두 개의 파형(시간에 따라 값이 변화하는 모양)을 조합해서 움직임을 만들 때

         사인과 코사인을 함께 쓸 때는 위상 차이가 움직임에 영향을 준다

         하지만 단독으로 진동만 구현할 때는 거의 차이가 없다