유니티 : 목표 지점으로 이동시키기
2022. 1. 10. 17:33ㆍ개발/유니티
오늘은 네 가지의 함수에 대해서 배울 것이다. 이것은 Vector3에서 전부 지원하는 함수이다.
Vector3.MoveTowards(현재 위치, 목표 위치, 속도)
target 위치로 등속 이동하는 함수
public class Move : MonoBehaviour
{
Vector3 target = new Vector3(-16.52f, 2.25f, 0);
void Update()
{
transform.position =
Vector3.MoveTowards(transform.position, target, 1f);
}
}
Vector3.SmoothDamp(현재 위치, 목표 위치, 참조 속도, 속도)
public class Move : MonoBehaviour
{
Vector3 target = new Vector3(-16.52f, 2.25f, 0);
void Update()
{
Vector3 velo = Vector3.zero;
transform.position =
Vector3.SmoothDamp(transform.position
, target, ref velo, 1f);
}
}
일정한 속도가 아닌 부드럽게 이동한다.
MoveTowards함수와는 달리 매개변수로 받는 속도가 작을 수록 빨라진다. (반비례 관계)
세 번째 매개 변수는 나중에 알아보고, 일단 zero로 두고 진행을 하자. (zero가 아니라면 위치가 바뀐다.)
ref는 참조 접근이라는 키워드이며, 실시간으로 바뀌는 값을 적용할 수 있게 된다.
Vector3.Lerp(현재 위치, 목표 위치, 속도)
public class Move : MonoBehaviour
{
Vector3 target = new Vector3(-16.52f, 2.25f, 0);
void Update()
{
transform.position =
Vector3.Lerp(transform.position,
target, 1f);
}
}
SmoothDamp와 유사한 동작을 한다. 차이점은 매개변수의 개수와 속도에 대한 매개변수에 있다.
속도는 최댓값이 1이며, 작을 수록 느리고 클 수록 빠른 정비례 관계이다.
Lerp 함수같은 이동을 선형보간 이동이라고도 한다.
Vector3.Slerp(현재 위치, 목표 위치, 속도)
public class Move : MonoBehaviour
{
Vector3 target = new Vector3(-16.52f, 2.25f, 0);
void Update()
{
transform.position =
Vector3.Slerp(transform.position,
target, 0.05f);
}
}
Lerp 함수와의 차이점은 Slerp는 구면보간 이동 (포물선 이동)을 한다는 점이다. 그냥 직진이 아니라 점프해서 간다고 생각해도 될 것 같다.
반응형
'개발 > 유니티' 카테고리의 다른 글
| 유니티 : 현실 물체 만들어보기 튜토리얼 (0) | 2022.01.13 |
|---|---|
| 유니티 : Time.deltaTime(델타 타임) 사용하는 방법 (0) | 2022.01.13 |
| 유니티 : 기본적인 디바이스 입력으로 오브젝트 이동 (0) | 2022.01.07 |