오늘 하기로한 과제 중 하나가 물체를 공전 시키는 것을 구현하는 것인데, 특별하게 어렵지 않게 transform.RotateAround 함수를 통해 충분히 간단하게 구현 할 수 있다. 그런데 목적은 단순하게 구현하는 것이 아니라 삼각함수를 가지고 공전 하는 기능을 구현해 보았다.
공전하는데 필요한 공식
공전 반지름
현재 각도
준비해야할 것은 다음과 같다.
private float radius = 5f; // 공전 반지름
private float angle = 0f; // 현재 각도
private float speed = 3f; // 공전 속도
기본적으로 공전하는데 필요한 변수는 전역 변수로 만들어둔다.
private void OrbitalMove()
{
// 각도를 시간에 따라 증가시킴
angle += speed * Time.deltaTime;
// 공전하는 물체의 새로운 좌표를 계산
float x = centerPosition.x + Mathf.Cos(angle) * radius;
float y = centerPosition.y + Mathf.Sin(angle) * radius;
// 물체의 위치를 업데이트
transform.position = new Vector2(x, y);
}
OrbitalMove 함수로 각도와 물체가 공전하는데 필요한 새로운 좌표를 삼각함수로 구하여 물체를 업데이트 하는 기능이 구현 되었다.
굳이 이렇게 하는 이유는 기본적으로 어떤 원리로 공전을 하는가를 알아가는 것도 있지만, x 또는 y 값을 미세조정 하여 타원의 형태로도 공전이 가능하게 할 수 있다.