티스토리 뷰



RotateAround는 흔히 공전으로 설명되지만 그냥 사용해버리면 생각과 다른 결과가 나오기 일쑤입니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class gonjun : MonoBehaviour {
    public float speed;
    public Transform target;
 
    void Update () {
        // 버전 1 (지구와 달에붙임) -> 잘못된 결과가 나온다. (지구의 움직임을 달이 고려하지 않기 때문)
        transform.RotateAround(target.transform.position, Vector3.up, speed * Time.deltaTime);
        // 버전 2 (태양과 지구에 붙인 후 부모 자식 설정함) -> 결과는 잘나옴
        transform.Rotate(0, speed*Time.deltaTime, 0);
        
    }
}
cs



움직이는 대상을 기준으로 RotateAround를 하면 해당 포지션을 참조한 이후에 달라져버리면 그만큼 반지름이 변화됨 상태에서 다시 참조하고 하기 때문에 원하는 값을 얻을 수 없다.



따라서 공전을 구현하기에 가장 쉬운 방법은 자식 계층으로 돌려버리는 방법이다.


그러나 때에 따라선 자식계층으로 설정할 수 없을 때도 있는데,

그럴 때는 임의의 부모를 설정해서 돌려버리는 게 제일 편하다.

그렇지 않으면 타겟의 이동값을 계속 갱신해서 반영시켜줘야하기 때문이다.

그리고 자전까지 다르게 해줘야하면 ㅎㅎ

암튼 그렇다.


케이스1의 경우. 제대로 나오지 않는게 보임.




케이스2다. 제대로 적용된 게 보임.



댓글
최근에 올라온 글
Total
Today
Yesterday
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31