[TIL] 물체 공전 하기

Dreamer·2024년 10월 18일

1. 오늘 주제

오늘 하기로한 과제 중 하나가 물체를 공전 시키는 것을 구현하는 것인데, 특별하게 어렵지 않게 transform.RotateAround 함수를 통해 충분히 간단하게 구현 할 수 있다. 그런데 목적은 단순하게 구현하는 것이 아니라 삼각함수를 가지고 공전 하는 기능을 구현해 보았다.

공전하는데 필요한 공식
r=r = 공전 반지름
θ=\theta = 현재 각도
x=r∗cos(θ)x = r * cos(\theta)
y=r∗sin(θ)y = r * sin(\theta)

2. 공전

준비해야할 것은 다음과 같다.

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 값을 미세조정 하여 타원의 형태로도 공전이 가능하게 할 수 있다.

profile
새로운 시작

0개의 댓글