앞을 내다보기
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 47번째.
움직이는 목표물을 향한 카메라는 목표물이 앞으로 갈 곳만큼이나 지나온 곳도 많이 보여 줍니다. 대신 목표물 앞의 한 지점을 향하게 하세요. 목표물의 위치에 속도와 초 단위의 선행 시간을 곱한 값을 더한 지점입니다. 경주 트랙 옆 스탠드에 설치된 이 카메라는 차를 따라 회전하며 차보다 0.5초 앞을 겨냥합니다.
public Rigidbody car;
public float lead = 0.5f;
void LateUpdate()
{
Vector3 aim = car.position + car.linearVelocity * lead;
transform.LookAt(aim);
}초당 20단위로 움직이면 겨냥 지점은 차보다 10단위 앞에 있고, 초당 4단위로 움직이면 2단위 앞에 있으며, 정지해 있는 차는 바로 그 위치를 겨냥합니다. 속도는 차의 실제 움직임이므로 미끄러지거나 후진할 때도 지점이 올바른 곳에 있습니다. transform.forward는 그렇지 않습니다. 후진하는 차의 앞쪽은 차가 가는 방향과 반대쪽을 향하고, 굴러가는 공의 앞쪽은 공과 함께 회전합니다.
추적 카메라에서도 앞쪽을 겨냥할 수 있습니다. 목표물 자체가 아니라 목표물 앞의 지점을 화면에 담는 방식입니다. 플레이어가 돌아설 때처럼 그 지점이 반대쪽으로 뒤집힐 수 있다면, 한 번에 화면 전체가 갑자기 움직이지 않도록 매 프레임 선행 거리를 조금씩 바꾸세요.
챌린지
중급이 사이드 뷰는 러너를 x축을 따라 추적합니다(화살표를 사용해 러너를 왼쪽과 오른쪽으로 움직입니다). 카메라에 러너가 향하는 방향의 더 많은 영역이 보이도록 만드세요:
- 카메라는 러너가 마지막으로 움직인 쪽의 x축 방향으로 러너 앞
ahead(3) 단위 지점에 위치합니다. 러너가 처음 움직이기 전에는 러너를 중앙에 둡니다. - 러너가 방향을 바꾸면, 앞쪽 위치가 순간 이동하는 대신 초당
shiftSpeed(4) 단위의 속도로 반대편으로 이동합니다. - 러너가 멈추면 카메라는 앞쪽 위치를 유지합니다.
- 카메라의 y와 z는 현재 값 그대로 유지합니다.
Play를 누르고 양쪽 방향으로 움직인 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// 플레이어가 마지막으로 이동한 방향으로 ahead 단위만큼 앞서가도록 shiftSpeed 속도로 부드럽게 이동합니다.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.