유니티 입력없이 이동시키기

김찬수·2023년 5월 10일
0

Unity

목록 보기
5/15

유니티에서 오브젝트를 입력없이 이동시키는 방법에는 여러가지가 있으니, 기록해놓고 필요할 때 마다 보고 상황에 맞는 방법을 선택할 생각이다.

MoveTowards : 일정한 속도로 목표지점을 향해 움직인다.
MoveTowards 함수의 매개변수는 각각 “시작 위치, 목표 위치, 속도”을 뜻한다.

// 스크립트가 부착된 오브젝트의 인스펙터 창에서 target을 끌어다 넣어주는것을 잊어서는 안된다.
[SerializeField] private GameObject targetPosition; 

private float speed = 0.5f;

private float step;

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

SmoothDamp : 목표 지점을 향해 가다가 목표 지점 근처에서 감속한다.
SmoothDamp 함수의 매개변수는 각각 “현재 위치, 목표 위치, !참조 속도, 목표 도달까지 걸릴 시간”을 뜻한다.
!참조 속도 : 매 호출마다 이 메소드에 의해 변경된 현재속도를 나타낸다.

// 스크립트가 부착된 오브젝트의 인스펙터 창에서 target을 끌어다 넣어주는것을 잊어서는 안된다.
[SerializeField] private GameObject targetPosition;

private Vector3 velocity = Vector3.zero;

private void Update()
{
    transform.position = Vector3.SmoothDamp(transform.position, targetPosition.transform.position, ref velocity, 0.1f);
}

Lerp : 선형 보간 이동, SmoothDamp보다 감속시간이 길다.

Vector3 Lerp(Vector3 a, Vector3 b, float t)

매개변수 a는 시작 위치 값이고, t = 0일 때 반환된다.
매개변수 b는 목표 위치 값이고, t = 1일 때 반환된다.
매개변수 t는 a와 b사이를 보간될 때 사용되는 값이다. 최솟값은 0, 최댓값은 1이다.

// 스크립트가 부착된 오브젝트의 인스펙터 창에서 target을 끌어다 넣어주는것을 잊어서는 안된다.
[SerializeField] private GameObject targetPosition;

private Vector3 velocity = Vector3.zero;

private void Update()
{
    transform.position = Vector3.Lerp(transform.position, targetPosition.transform.position, 0.05f);
}

Slerp : 구면 선형 보간, 호를 그리며 이동한다.
사용법은 Lerp함수의 사용법과 같다.

profile
프로그래머 지망생

0개의 댓글