Menu
CoddyTech

움직이는 방향을 바라보기

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

transform.LookAt에는 바라볼 지점이 필요합니다. 흔히 가지고 있는 것은 대신 방향입니다. 속도, 바람, 무언가가 움직인 방향 같은 것이죠. Quaternion.LookRotation(direction)은 앞쪽(파란색 z 화살표)이 그 방향을 향하고, 오브젝트의 위쪽은 월드의 위쪽을 향하도록 하는 회전을 반환합니다. 공중으로 쏜 화살은 처음에는 위쪽을 향하다가 떨어지면서 기울어지는데, 속도도 그렇게 변하기 때문입니다.

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Update()
{
    if (rb.linearVelocity != Vector3.zero)
    {
        transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
    }
}

길이가 아니라 방향만 중요합니다. (1, 0, 2)와 (3, 0, 6)은 같은 회전을 만듭니다. 영벡터에는 방향이 없으므로 LookRotation(Vector3.zero)는 Look rotation viewing vector is zero를 로그에 출력하고 Quaternion.identity를 반환합니다. 이는 오브젝트가 +z를 향하도록 합니다. 그래서 화살은 먼저 확인합니다. 멈추면 멈추기 전에 향하던 방향을 유지합니다. LookAt(target.position)은 LookRotation(target.position - transform.position)과 같은 회전을 만듭니다.

방향의 위아래 성분에 따라 앞쪽도 함께 위나 아래로 기울어집니다. 비탈을 올라가는 보행자처럼 똑바로 서 있어야 하는 대상이라면 먼저 방향의 y를 0으로 설정하여 오브젝트가 y축을 중심으로만 회전하도록 합니다. 두 번째 인수인 LookRotation(direction, Vector3.up)은 어느 쪽이 위인지 지정합니다. 지정하지 않으면 Vector3.up이 기본값입니다.

challenge icon

챌린지

중급

벌은 꽃에서 꽃으로 날아갑니다. 미리 작성된 Mover 스크립트는 벌을 직선으로 날게 하고, 이동 중에 올라가거나 내려가며, 각 꽃에서 1초 동안 쉬게 합니다. Mover는 그대로 두세요. 벌이 날아가는 방향을 향하도록 FaceMotion을 작성하세요.

  • 위에서 보았을 때, 마지막 프레임 이후 이동한 방향을 향합니다.
  • 똑바로 선 자세를 유지합니다. 올라가거나 내려갈 때 코를 위나 아래로 향하지 않습니다.
  • 쉴 때는 기존에 향하던 방향을 유지하며, 아무것도 로그에 기록되지 않습니다.

코드는 LateUpdate()에 작성합니다. 따라서 Mover가 이번 프레임에서 벌을 이미 이동시킨 상태입니다. Play를 누른 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class FaceMotion : MonoBehaviour
{
    Vector3 lastPosition;

    void Start()
    {
        lastPosition = transform.position;
    }

    void LateUpdate()
    {
        // 마지막 프레임 이후 벌이 움직인 방향을 바라보게 합니다.
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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