티스토리 뷰
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다. 제대로 적용된 게 보임.
'개발일기 > 유니티3D' 카테고리의 다른 글
각 캐릭터를 컨트롤해보자. 다중 캐릭터 컨트롤 (0) | 2018.10.08 |
---|---|
7가지의 이동방식을 직접 비교해서 보여드림. (2) | 2018.10.05 |
연습했어요. 좀비떼 30마리가 나옵니다. 반자동전투합니다. (0) | 2018.10.04 |
Translate로 이동할 때, Space.World와 Space.Self의 차이점 (0) | 2018.10.04 |
유니티에서 각도 구할 때 Mathf.Atan()대신에 Mathf.Atan2를 쓰는 이유 (0) | 2018.10.02 |
댓글