반응형
SMALL
-
-
- 1. 오일러각을 사용하지 않는 Quaternion 클래 메서드
- 1. 생성
Quaternion.LookRotation
Quaternion.AngleAxis
Quaternion.FromToRotation - 2. 조작
Quaternion.Slerp
Quaternion.Inverse
Quaternion.RotateToWards
Transform.Rotate
Transform.RotateAround
- 1. 생성
- 2. 오일러 각을 처리하는 사용하는 Quaternion 클래스 메서드 - 쿼터니언에서 오일러 각을 검색하는것은 가능하지만 검색, 수정 및 다시 적용하면 문제가 발생할 수 있다기 때문에
각도를 변수로 유지하고 회전에 오일러 각을 적용하는 데에만 사용하는 편이 좋다.
- Quaternion.Euler
- 1. 오일러각을 사용하지 않는 Quaternion 클래 메서드
-
- 위의 각 메서드들중 가장 많이 쓰이는 메서드 들을 정히자면
- Quaternion.LookRotation
- Quaternion.Euler
- Quaternion.Slerp
- Quaternion.FromToRotation
- Quaternion.Identity
- Quaternion.Angle
이전 포스팅에서 이어서 진행하겠다.

- Quaternion.LookRotation - 반환값 : Quaternion
- 타겟의 방향을 바라보는 회전 상태를 반환한다.
- Vector3 값이 메개변수로 들어가며 2번째 메개변수는 머리가 향하는 방향을 정해줄수 있다.
- 두번째 인자는 생략하면 자동적으로 Vector3.Up으로 고정된다.
void Update()
{
this.transform.rotation = Quaternion.LookRotation(this.target.position);
}
- 하지만 자세히 보면 캐릭터가 기울여진 상태로 타겟을 바라보고 있는데 이러한 이유는 타겟과 캐릭터의 월드 좌표 y 값이 다르기 때문이다.
- 이럴땐 해당 타겟의 포지션벡터의 y값을 0 으로 바꾸어 변수에 담아주고 해당 변수를 넣어주면 된다.
void Update()
{
var newTartgettrans = new Vector3 ( this.target.transform.position.x,0,this.target.transform.position.z );
this.transform.rotation = Quaternion.LookRotation(newTartgettrans);
}
Quaternion.Euler - 반환값 : Quaternion
- 앞서 설명했듯이 오일러 각 (인스펙터 뷰의 트랜스폰 컴포넌트서 확인 가능한 Rotate 값_ 을 대입할수있게 해주는 함수이다.
- Euler 좌표계의 값이 내부적으로 어떻게 Quaternion으로 변환되어 저장되는지는 알 수 없으나 결과적으로 객체는 x축으로 0도, y축으로 40도, z축으로 0도의 회전한다.
void Start()
{
this.transform.rotation = Quaternion.Euler(new Vector3(0,40,0));
//or this.transform.rotation = Quaternion.Euler(0,40,0);
}

- Quaternion.Slerp & Quaternion.Lerp - 반환값 : Quaternion
- A 에서 B 까지 0.0 ~ 1.0 퍼센트 비율로 보간.
- 보간(Interpolation)이란 새로운 점을 만들기 위해 수많은 점들을 평균화시키는 것이다.
- 샘플점들을 직선으로 연결하지 않고 곡선으로 연결하는 방법이다.
- 오브젝트를 회전시킬때 좀 더 부드럽게 회전시킬수가 있다.
- Quaternion.Lerp Quaternion.Slerp 차이는 선형 보간이냐 원형 보간이냐의 차이가 있는데 기본적으로 둘은 같은 기능을 한다.
- 하지만 Lerp의 경우 Slerp에 비해 좀 더 빠르지만 바라봐야할 타겟이 멀리 있을수록 회전이 이상해 보일수 있다는 단점이 있다.
public Transform target;
public float damping = 3.0f; // 회전 속도
void Update()
{
//캐릭터와 목표와의 방향벡터
Vector3 dir = this.target.position - this.transform.position;
//방향벡터의 회전 값 변환
Quaternion rot = Quaternion.LookRotation(dir);
//캐릭터 회전시키기
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, rot, Time.deltaTime * this.damping);
//this.transform.rotation = Quaternion.Lerp(this.transform.rotation, rot, Time.deltaTime * this.damping);
this.transform.Translate(Vector3.forward * 1f * Time.deltaTime);
}
- Quaternion.Identity - 반환값 : Quaternion
- 회전 없음을 나타내는 Quaternion 클래스의 프로퍼티로 캐릭터의 회전값을 default값으로 변경해줄수 있다.
- 이를 이용하여 캐릭터를 회전시키고 다시 원점으로 돌려놓게 하는 것도 가능



- Quaternion.Angle - 반환값 : float
- a 와 b 두 회전 사이의 각도(degrees)를 도(angle) 단위로 반환한다.
- 예를 들어 세 번째 게임 오브젝트(C) 주위를 움직이는 두 개의 게임 오브젝트(A 및 B)가 있다고 가정했을때
C에서 A로, C에서 B로의 선은 시간이 지남에 따라 변할 수 있는 삼각형이 계속해서 만들어진다. 결과적으로 CA와 CB 사이의 각도는 Quaternion.Angle이 제공하는 값이다.
반응형
LIST
'유니티 엔진 클라이언트 > 개인공부' 카테고리의 다른 글
| 유니티 라이프 사이클 (1) | 2023.07.05 |
|---|---|
| [유니티 프로젝트] ik 역 운동학을 적용한 좀비 서바이버 (0) | 2023.05.23 |
| [유니티] Euler Angle (오일러 각) & Quaternion (쿼터니언) 정리 .1 (1) | 2023.03.01 |
| [유니티] 3D월드에서의 FPS 시점(1인칭) 움직임 구현 (0) | 2023.02.24 |
| [유니티] VrCity 오브젝트 위치로 이동 & VR City 마무리 (1) | 2023.02.24 |