Menu
CoddyTech

궤도 카메라

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

한 점 주위를 돌려면 각도를 유지하고, 고정된 오프셋을 그 각도만큼 회전시킨 다음 그 결과를 점에 더하세요. 벡터에 회전을 곱하면 방향이 바뀝니다. Quaternion.Euler(0, angle, 0) * offset은 오프셋을 y축 주위로 회전시키며, 길이와 높이는 그대로 유지됩니다. 이 카메라는 초당 20도씩 조각상 주위를 돌면서 항상 3단위 위, 6단위 바깥에 있습니다.

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

각도가 0이면 오프셋은 (0, 3, -6)이므로 카메라는 조각상 뒤에 있습니다. 각도가 90이면 오프셋은 (-6, 3, 0)으로 조각상의 -x 쪽에 있고, 180이면 (0, 3, 6)으로 앞에 있습니다. 카메라를 이동해도 카메라 자체는 회전하지 않으므로 LookAt이 새 위치마다 조각상을 다시 바라보게 합니다.

두 번째 각도는 카메라를 위로 올립니다. Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance)는 뒤쪽 방향을 pitch만큼 위로 회전시키고(x축을 기준으로 양수 방향으로 회전하면 (0, 0, -1)이 위쪽으로 기울어집니다), 이어서 yaw만큼 회전시키므로 카메라는 어떤 각도에서든 distance만큼 떨어져 있습니다.

Euler Angles에서처럼 각도는 직접 만든 필드에 저장됩니다. 각도는 튀는 현상 없이 360을 넘거나 0 아래로 내려갈 수 있으며, 각도를 제한하거나 키보드로 변경할 수 있습니다. LateUpdate()에서 이 작업을 하면 해당 프레임에 조각상이나 플레이어가 이동한 뒤 카메라가 배치됩니다.

challenge icon

챌린지

중급

플레이어가 카메라를 탑 주위로 움직일 수 있게 하세요.

  1. Update()에서 오른쪽 및 왼쪽 화살표 키는 turnSpeed에 Time.deltaTime을 곱한 값만큼 yaw를 변경하고, 위쪽 및 아래쪽 화살표 키는 tiltSpeed에 Time.deltaTime을 곱한 값만큼 pitch를 변경합니다.
  2. 그런 다음 pitch = Mathf.Clamp(pitch, 10f, 60f);를 유지하세요.
  3. LateUpdate()에서 transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);를 설정한 다음, transform.LookAt(target);를 설정하세요.

‘플레이’를 누르고 탑 주위를 움직여 보세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // 방향키로 yaw와 pitch를 변경합니다.
    }

    void LateUpdate()
    {
        // 카메라를 target 주위에 배치하고 target을 바라보게 합니다.
    }
}

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

직접 연습해 보세요: Unity 플레이그라운드