[Unity] transform.RotateAround()

baebaeran·2025년 3월 7일
0

Unity_메모장

목록 보기
14/14
post-thumbnail

transform.RotateAround()라는 메소드는 어떤식으로 이루어져 있고, 작동은 어떻게 하는지 알아보자.

이 메소드는 어느 한 물체의 주변을 공전하게 해주는 메소드이다.

public void RotateAround(Vector3 point, Vector3 axis, float angle)

RotateAround()의 기본 형태

매개 변수는 point, axis, angle로 총 세가지이다.
point : 기준이 되는 물체의 Vec
axis : 물체가 공전할 때의 축 (y축을 기준으로 하냐, x축을 기준으로 하냐에 따라서 회전하는 방식이 다르다.)

y축을 기준으로 할 경우의 공전 궤도x축을 기준으로 할 경우의 공전 궤도

angle : 공전하는 속도 (값이 클 수록 공전하는 속도가 빨라짐. 한번 움직일 때 어느 만큼 회전을 할지를 정하는 값인 거 같다. 같은 시간을 두고 5도를 회전할 때와 30도를 회전할 때의 속도가 다른 것과 같은 원리인 거 같다.)

RotateAround()를 뜯어보자


Transform의 네임스페이스로 가보면 친절히 요약과 매개변수와 코드를 알려준다.

1,

Vector3 vector = position;

원래는 tranform.Position으로 회전시키려는 물체의 포지션을 가져와야 하지만, 이 메소드에 쓰인 position은
이러한 프로퍼티를 사용하여 손쉽게 가져오고 있다. 또한 get_position_Injected도 따로 존재하지만 거기까지는 이해를 하지 못했다.

2,

Quaternion quaternion = Quaternion.AngleAxis(angle, axis);

이 한 줄을 이해하는데까지 오래걸렸는데
기본적으로는 Quaternion.AngleAxis()를 이용하여 quaternion를 구하는 코드이다. 당연한 말이다.
Quaternion.AngleAxis()은 'Angle를 기준으로 각도를 회전하는 회전을 만듭니다.' 라고도 할 수 있고, '축 axis 주위를 angle만큼 회전한 rotation을 생성한다.' 라고도 할 수 있다.

즉, 축을 두고선 angle만큼 회전한 값을 생성하는 메소드이다.
하지만, 기본적으로 사분수이기 때문에 내가 그동안 접했던 (0,30,0)이런 형태가 아닌, (0, 0.1, 0.3, 0.8) 이런 형태로 나와서 이해하지 않고 그냥 받아들였다.

3,

Vector3 vector2 = vector - point;

회전시키려는 물체와 기준이 되는 물체를 뺀 값을 Vector2에 초기화했다.
두 물체 사이의 거리를 구했다고도 할 수 있다.

4,

vector2 = quaternion * vector2;

anlge만큼 회전한 값(움직인 값)을 vector2와 곱하여 새로 초기화해주었다.
가장 이해되지 않는 코드이다. 하지만, 공전을 구현하는데에 가장 핵심적인 코드이다.
+(더하기)는 되지 않고 *(곱하기)만 가능하다. (/와 -도 되지 않는다.)

이 4번째까지 구현했을 경우 anlge의 값이 높아질 수록 축을 공전하는 모습이 보인다. (같은 거리를 유지하며 움직임)

5,

vector = point + vector2;

공전시키려는 물체의 Vec에 기준이 되는 물체의 Vec과 Vec2를 더하여 초기화해준다.
4번째 줄 까지는 축을 중심으로 위치(or 회전 값)을 구했다면, 이 5번째 줄로 인해서 point를 중심으로 바뀐다.

6,

position = vector;

6번째 줄에서 공전시키려는 물체의 포지션에 Vec값을 초기화시켜줌으로써 공전을 한다.

7,

RotateAroundInternal(axis, angle * (MathF.PI / 180f));

이건 진짜 모르겠다.

Rotate() 메소드의 하위 메소드로 있는 걸로 봐서 이 7번째 줄로 LookAt()을 대체하는 것 같다.

한 줄 정리

오브젝트가 중심은 point, 회전하는 기준은 axis로 anlge만큼 빠르게 공전하는 메소드

profile
보고-배우는-것-들을-기록합니다

0개의 댓글