Menu
CoddyTech

한 지점으로 이동하기

Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 85개 중 35번째.

Vector3.MoveTowards(current, target, maxStep)은 target에 최대 maxStep만큼 더 가까운 점을 반환합니다. 목표가 그보다 가까우면 목표 자체를 반환하므로, 절대 목표를 지나치지 않습니다. 이동 단계로 speed * Time.deltaTime을 사용하면 오브젝트가 일정한 속도로 이동해 목표 지점에서 정확히 멈춥니다. 이 케이블카는 초당 2단위의 속도로 역까지 미끄러지듯 이동합니다.

public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;

void Update()
{
    transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}

도착한 뒤에는 그 이후의 모든 호출이 다시 station을 반환하므로 케이블카는 제자리에 머물고, transform.position == station은 참이 됩니다. 하나의 숫자에는 Mathf.MoveTowards가 같은 방식으로 작동합니다.

Vector3.Lerp(a, b, t)는 a에서 b까지 가는 거리의 t 비율만큼 이동한 점입니다. t = 0.5이면 중간 지점입니다. Update()에서 Lerp(transform.position, station, 2f * Time.deltaTime)로 작성하면 매 프레임 남은 거리의 일부만큼 이동합니다. 처음에는 빠르고 끝에 가까워질수록 점점 느려지며, 일정한 속도로 도착하는 대신 목표에 서서히 가까워집니다. 오브젝트가 일정한 속도로 이동해 정확히 멈춰야 할 때는 MoveTowards를 사용하고, 부드럽게 감속하려면 이 Lerp 패턴을 사용하세요.

challenge icon

챌린지

중급

스페이스 키를 누르면 드론을 착륙 지점으로 이동시키세요.

  1. bool flying; 및 bool landed; 필드를 추가하세요. Input.GetKeyDown(KeyCode.Space)일 때 flying = true;로 설정하세요.
  2. flying && !landed인 동안 Vector3.MoveTowards(transform.position, pad, speed * Time.deltaTime)를 사용해 이동시키세요.
  3. transform.position == pad일 때 landed를 설정하고 Landed를 로그로 출력하세요.

‘플레이’를 누른 다음 스페이스 키를 누르세요. 드론이 착륙 지점에 착륙합니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Drone : MonoBehaviour
{
    public Vector3 pad = new Vector3(0, 0.25f, 0);
    public float speed = 2f;

    void Update()
    {
        // Space를 누른 후: speed로 pad까지 날아가고, 도착하면 Landed를 한 번 로그로 남기기
    }
}

Unity 스크립팅 기초의 모든 레슨

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