궤도 카메라
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()에서 이 작업을 하면 해당 프레임에 조각상이나 플레이어가 이동한 뒤 카메라가 배치됩니다.
챌린지
중급플레이어가 카메라를 탑 주위로 움직일 수 있게 하세요.
Update()에서 오른쪽 및 왼쪽 화살표 키는turnSpeed에Time.deltaTime을 곱한 값만큼yaw를 변경하고, 위쪽 및 아래쪽 화살표 키는tiltSpeed에Time.deltaTime을 곱한 값만큼pitch를 변경합니다.- 그런 다음
pitch = Mathf.Clamp(pitch, 10f, 60f);를 유지하세요. 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 플레이그라운드