오일러 각
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 42번째.
transform.eulerAngles는 x, y, z축을 기준으로 도 단위의 세 각도로 나타낸 객체의 회전입니다. Unity는 회전을 쿼터니언(다음 강의)으로 저장하며, 각도를 읽을 때마다 세 각도를 다시 계산합니다. 이때 값은 항상 0부터 360까지입니다. 널빤지를 z축을 기준으로 -10도 기울인 다음 값을 읽어 보세요.
transform.rotation = Quaternion.Euler(0, 0, -10);
Debug.Log(transform.eulerAngles.z); // 350-10을 설정했지만 코드는 350을 읽으므로 if (transform.eulerAngles.z < -5)는 절대 참이 되지 않습니다. 값을 다시 읽으면 세 숫자가 모두 바뀔 수 있습니다. (100, 0, 0)을 설정하면 (80, 180, 180)이 읽히는데, 이는 다른 방식으로 나타낸 동일한 방향입니다. Quaternion.Euler(x, y, z)는 반대 방향으로 작동하며 어떤 각도든 받을 수 있습니다. -10, 350, 710은 모두 같은 회전을 만듭니다. 따라서 각도를 직접 만든 float에 저장하고, 그 값을 변경하고 제한한 다음, 그 값으로 전체 회전을 설정하세요. 이 시소는 화살표 키로 기울며 어느 방향으로든 20도에서 멈춥니다.
public float speed = 40f;
float tilt;
void Update()
{
tilt += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
tilt = Mathf.Clamp(tilt, -20f, 20f);
transform.rotation = Quaternion.Euler(0, 0, tilt);
}읽어 온 각도 중 한 부분만 변경하지 마세요. transform.eulerAngles.x = 110;은 컴파일되지 않습니다(position.x와 마찬가지로 CS1612). eulerAngles를 복사하고 x를 변경한 뒤 복사본을 다시 대입하면 Unity가 변환한 각도를 기준으로 시작합니다. (100, 0, 0)을 설정한 뒤 복사본은 (80, 180, 180)이 됩니다. x에 10을 더하면 (90, 180, 180)이 되어 객체가 110이 아니라 다시 90으로 돌아갑니다.
챌린지
중급카메라의 회전을 수정하세요. 45에서 방향을 바꾸지만 -45에서는 바꾸지 않습니다. eulerAngles.y가 -45를 315로 읽기 때문입니다.
float angle;필드를 추가하고Update()의 처음 두 줄을angle += direction * speed * Time.deltaTime;로 바꾸세요.- 두 개의
if줄은 그대로 두고, 전체 회전을 설정하세요:transform.rotation = Quaternion.Euler(tilt, angle, 0);.
‘플레이’를 누르세요. 카메라가 아래쪽으로 기울어진 채 45에서 -45까지 회전한 다음 다시 돌아옵니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class Sweep : MonoBehaviour
{
public float speed = 30f;
public float limit = 45f;
public float tilt = 20f; // x축을 중심으로 아래쪽으로 회전하는 각도(도)
float direction = 1f;
void Update()
{
transform.Rotate(0, direction * speed * Time.deltaTime, 0, Space.World);
float angle = transform.eulerAngles.y;
if (angle > limit) direction = -1f;
if (angle < -limit) direction = 1f;
}
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드