코루틴을 활용한 포물선 방정식

포물선 방정식

포물선 방정식은 물체가 중력의 영향을 받아 수직 방향으로 자유낙하하면서 수평 방향으로 일정한 속도로 직진하는 운동을 모델링하는 데 사용되는 수학적인 표현입니다. 이 방정식은 2차원 운동의 궤도를 설명하는 데 주로 사용됩니다.

 

포물선 방정식의 일반적인 형태는 다음과 같습니다.

  • y는 물체의 수직 위치를 나타냅니다.
  • x는 물체의 수평 위치를 나타냅니다.
  • a, b, c는 상수 계수입니다.

포물선 운동에서 중요한 것은 중력의 영향으로 수직 방향으로 가속하고, 수평 방향으로 일정한 속도로 움직인다는 것입니다. 따라서 포물선 방정식을 사용하면 어떤 시간에 물체의 위치를 예측할 수 있습니다.

 

일반적으로 포물선 방정식은 다음과 같이 표현됩니다.

  • g는 중력 가속도를 나타냅니다 (주로 9.8 m/s^2로 가정).
  • t는 시간입니다.
  • v0는 초기 수평 속도를 나타냅니다.
  • y0는 초기 수직 위치를 나타냅니다.

 


코드

Vector3 start = transform.position; //현재 위치
Vector3 end = endPos; //끝나는 위치

float jumpTime = Mathf.Max(0.3f, Vector3.Distance(start, end) / jumpSpeed); //거리분의 속력을 해서 시간을 얻어냄 (거,속,시)
float currentTime = 0f;
float percent = 0f;
//y방향의 초기속도
float v0 = (end - start).y - gravity;

while (percent < 1)
{
        currentTime += Time.deltaTime;
        percent = currentTime / jumpTime; //percent는 currentTime == jumpTime이 되어야 1이 된다

        Vector3 position = Vector3.Lerp(start, end, percent); //자연스럽게 이동하기 위해 Lerp사용, percent만큼 이동

        //포물선 운동 : 시작위치 + 초기속도*시간 + 중력*시간제곱
        position.y = start.y + (v0 * percent) + (gravity * percent * percent);

        transform.position = position;

        yield return null;
}

 

코루틴을 사용하지 않은 최신 버전의 코드입니다.