궤도 카메라
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 46번째.
한 점 주위를 돌려면 각도를 유지하고, 고정된 오프셋을 그 각도만큼 회전시킨 다음 결과를 점에 더하세요. 벡터에 회전을 곱하면 회전합니다. 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은 새 위치마다 카메라가 다시 조각상을 향하게 합니다.
Euler Angles에서처럼 각도는 자체 필드에 저장됩니다. 각도는 튀는 현상 없이 360을 넘어 커지거나 0 아래로 내려갈 수 있으며, 각도 범위를 제한하거나 키보드로 변경할 수 있습니다. LateUpdate()에서 이 작업을 수행하면 해당 프레임에서 조각상이나 플레이어가 이동한 뒤 카메라 위치가 설정됩니다.
챌린지
중급플레이어가 카메라를 탑 주위로 이동하게 하세요. 카메라는 항상 탑의 위치에서 distance (8) 유닛 떨어져 있고 탑을 바라봅니다. 스크립트는 yaw와 pitch에 두 각도를 저장합니다:
yaw는 카메라가 탑 주위를 얼마나 회전했는지를 나타냅니다. 오른쪽 화살표를 누르면 값이 증가하고 왼쪽 화살표를 누르면 감소하며, 초당turnSpeed(90)도씩 변합니다. yaw가 0이면 카메라는 탑의 -z 쪽에 있고, yaw가 90이면 -x 쪽에 있습니다.pitch는 탑에서 바라봤을 때 카메라가 탑의 높이보다 몇 도 위에 있는지를 나타냅니다. 위쪽 화살표를 누르면 값이 증가하고 아래쪽 화살표를 누르면 감소하며, 초당tiltSpeed(45)도씩 변합니다. 값은 10과 60 사이를 유지합니다.
처음에는 yaw가 0이고 pitch가 30이므로 카메라는 탑 위치보다 4유닛 위, 6.93유닛 뒤에 있습니다. Play를 눌러 주위를 이동한 다음 Check를 누르세요.
직접 해보기
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을 바라보게 합니다.
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.