움직이는 방향을 바라보기
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이 기본값입니다.
챌린지
중급벌은 꽃에서 꽃으로 날아갑니다. 미리 작성된 Mover 스크립트는 벌을 직선으로 날게 하고, 이동 중에 올라가거나 내려가며, 각 꽃에서 1초 동안 쉬게 합니다. Mover는 그대로 두세요. 벌이 날아가는 방향을 향하도록 FaceMotion을 작성하세요.
- 위에서 보았을 때, 마지막 프레임 이후 이동한 방향을 향합니다.
- 똑바로 선 자세를 유지합니다. 올라가거나 내려갈 때 코를 위나 아래로 향하지 않습니다.
- 쉴 때는 기존에 향하던 방향을 유지하며, 아무것도 로그에 기록되지 않습니다.
코드는 LateUpdate()에 작성합니다. 따라서 Mover가 이번 프레임에서 벌을 이미 이동시킨 상태입니다. Play를 누른 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// 마지막 프레임 이후 벌이 움직인 방향을 바라보게 합니다.
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.