Menu
CoddyTech

앞을 내다보기

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

움직이는 플레이어를 중앙에 둔 카메라에는 플레이어가 지나온 곳과 앞으로 나아갈 곳이 모두 보입니다. 대신 측면 시점으로 앞서 볼 수 있습니다. 플레이어가 향하는 쪽에서 플레이어보다 몇 단위 앞에 위치하면 됩니다.

플레이어가 방향을 바꾸면 앞서 보는 쪽도 뒤집히는데, 앞서 보는 위치가 즉시 바뀌면 화면 전체가 튀게 됩니다. 따라서 앞서 보는 위치를 필드에 저장하고 매 프레임 조금씩 새 값으로 이동시키세요. Mathf.MoveTowards를 사용하면 됩니다. 이 보트 카메라는 2단위 앞서 보고 초당 3단위씩 이동합니다.

float lead;
float heading = 1f;   // 1은 오른쪽으로 항해, -1은 왼쪽으로 항해

void LateUpdate()
{
    lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
    transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}

방향은 보트가 마지막으로 움직인 방향입니다. 현재 프레임의 x 좌표와 이전 프레임의 x 좌표를 비교하고, 움직이지 않은 프레임에는 방향을 그대로 두세요. 그러면 보트가 멈춰 있을 때도 앞서 보는 위치가 유지됩니다.

challenge icon

챌린지

중급

측면 카메라에 러너가 나아가는 방향이 더 많이 보이게 하세요.

  1. LateUpdate()에서 러너의 x와 lastX를 비교하세요. 오른쪽으로 움직이면 direction을 1로 설정하고, 왼쪽으로 움직이면 -1로 설정하며, 가만히 있으면 그대로 둡니다.
  2. shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);를 사용해 shift를 부드럽게 이동시키세요.
  3. y와 z는 그대로 유지하면서 카메라의 x를 player.position.x + shift로 설정하세요.

‘플레이’를 누르고 양쪽 방향으로 달려 보세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

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);
    }
}

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

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