Menu
CoddyTech

오일러 각

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 40번째.

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도로 되돌아갑니다.

challenge icon

챌린지

중급

기둥 위의 보안 카메라가 좌우로 계속 회전해야 합니다. 앞을 향한 상태(y축을 중심으로 0도)에서 오른쪽으로 돌며, y값이 초당 speed(30)도씩 증가하고, limit(45)에 도달하면 되돌아 방향을 바꿔 -limit(-45)까지 회전한 다음 다시 방향을 바꾸는 식으로 계속 움직입니다. 회전하는 동안 내내 x축을 중심으로 tilt(20)도 아래쪽으로 기울어진 상태를 유지합니다.

Play를 누르세요. 시작 스크립트는 45에서 되돌아가지만, -45에서는 계속 회전합니다. 이유를 찾아 스크립트를 수정한 다음 Check를 누르세요.

직접 해보기

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;
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

물리와 게임플레이의 모든 레슨