회전을 주는 3가지 방법
1. 오일러각
2. 쿼터니언(사원수)
3.방향벡터
오일러각(Euler)는 x,y,z축의 각각의 호전으로 표현하는 방식이다.
2D - z축으로 회전, x, y축에서 이동
3D - x/y/z축으로 회전, x, y, z축에서 이동
문제점 : 짐벌락 - https://www.youtube.com/watch?v=yxMQKsab5TQ&t=321s
쿼터니언(Quaternion)은 w, x, y, z의 네 가지 수로 회전을 표현하는 방식이다.
게임 엔진에서는 주로 쿼터니언을 활용하여 회전하지만 매우 비직관적이기 때문에 개발자들은 오일러각을
쿼터니언으로 바꾸는 방식을 활용하고, 이러한 메소드를 제공한다.
Quaternion.Identity - 회전이 없다.
Quaternion.Euler - 오일러각을 '쿼터니언'으로 변환하는 방식
transform.eulerAngles - 오일러각을 '회전'에 직접 반영하는 방식
문제점 : 우리가 생각하는 어떤 특정한 회전을 적용하는 수많은 쿼터니언이 있다.
쿼터니언의 값을 직접 변경해주는 방법은 사용하면 안된다.
방향 벡터는 특정한 방향을 바라보게 하거나, 특정한 방향과 축을 맞출 때 활용한다.
예시 - LookRotation
public class ExampleClass : MonoBehaviour
{
public Transform target;
void Update()
{
Vector3 relativePos = target.position - transform.position;
// the second argument, upwards, defaults to Vector3.up
Quaternion rotation = Quaternion.LookRotation(relativePos, Vector3.up);
transform.rotation = rotation;
}
}
예시 - FromToRotation(벡터의 정렬)
rb.velocity = transform.forward * speed.z;
Ray ray = new Ray(transform.position, transform.forward);
Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 1f);
if (hit.collider != null)
{
Instantiate(Effect, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
Destroy(gameObject);
}
Lerp (선형보간)
Mathf.Lerp(float 초기값, float 목표값, float 비율);
Slerp (구형보간)
Quaternion.Slerp(Quaternion From, quaternion To, float 비율);
'Today I Learned' 카테고리의 다른 글
[내일배움캠프] Unity 게임 개발 심화 - Material 만들기 (1) | 2023.12.28 |
---|---|
[내일배움캠프] Unity 게임 개발 심화 - 상호작용 만들기 (0) | 2023.12.27 |
[내일배움캠프] Unity 게임 개발 심화 - SOLID원칙 (0) | 2023.12.22 |
[내일배움캠프] Unity 게임 개발 숙련 - 팀프로젝트 마무리 (0) | 2023.12.21 |
[내일배움캠프] Unity 게임 개발 숙련 - 팀프로젝트 발표 D - 1 (1) | 2023.12.20 |