저번 시간에는 키보드의 입력을 이용해서 오브젝트를 움직이는 법을 배워보았습니다.
오늘은 저번이랑은 조금 다르게 목표지점으로 움직이는 것을 배워보도록 하겠습니다.
시작~~~~~~~~하겠습니다!!!!
오늘 배울 이동 방식은 총 4가지로 모두 Vector에서 제공하는 함수입니다.
(마지막 하나는 Vector3에서만 제공)
먼저 MoveTowards입니다.
MoveTowards란 세 가지의 매개변수가 존재하는데 (현재 위치, 목표 위치, 속도)로 구성됩니다.
참고로 MoveTowards는 등속운동입니다.
(transform.position (지금 현재 위치), target ( x축의 9, y축의 1.5), 0.05f(속도))의 구성입니다.
속도에는 제한된 값이 없으며 크기가 클수록 속도가 빨라지게 됩니다.
두 번째 방법은 SmoothDamp입니다.
SmoothDamp는 네 가지의 매개변수가 존재하는데 (현재 위치, 목표 위치, 참조 속도, 속도)로 이루어져 있으며 MoveTowards랑 다르게 부드러운 (자연스러운) 감속을 위해 사용됩니다.
여기서 아까 전의 MoveTowards와 다른 점은 참조 속도가 있다는 것인데 솔직히 아직 참조 속도의 정확한 개념을 잘 모르겠습니다.
다른 속도를 참조한다는 뜻인데 방향(up, down)을 주면 그 방향에 맞춰서 이동한다고 합니다.
(참조 속도에 대해서는 더 자세하게 알아보도록 하겠습니다. ^^)
그리고 맨 마지막의 속도는 숫자가 커질수록 속도는 느려집니다.
목표지점에 도달할수록 속도가 점점 줄어드는 것을 볼 수 있습니다.
다음으로 SmoothDamp와 비슷한 Lerp(선형 보간 이동)입니다.
구성은 MoveTowards와 같으며 속도는 1이 상한 점입니다.
SmoothDamp와 다른 점은 참조하는 속도가 없다는 것이며, 오히려 더 간단하게 부드러운 움직임을 구현할 수 있다는 것입니다.
마지막으로 Vector3에서만 구현 가능한 Slerp(구면 선형 보간 이동)가 있습니다.
Lerp가 일직선으로 움직이는 것이었다면 SLerp는 구면 즉, 포물선을 그리며 이동하는 것입니다.
구성은 Lerp와 동일하기 때문에 속도는 1이 상한 점이며 속도와 숫자의 크기는 비례합니다.
Lerp와 다르게 포물선을 그리면서 목표지점에 도달하는 것을 볼 수 있습니다.
별개로 왜 Vector3에서만 SLerp가 구현이 가능한지에 대해서도 알아보았습니다.
이를 설명하기 위해서는 선형 보간이라는 단어의 의미를 알아야 합니다.
선형 보간이란 두 지점을 선으로 연결해서 두 지점 사이의 위치를 파악하는 방법입니다.
즉, 선형 보간은 평평한 면의 위에 있다고 가정했을 때 적용되는 것입니다.
반면, 우리가 살고 있는 지구 같은 경우는 평면이 아닌 구체의 형태를 띠고 있습니다.
아까와 같은 방법으로 두 지점 사이의 직선으로 잇게 된다면 실제로 구체에서의 거리는 아래와 같이 다르게 됩니다.
a와 b사이가 정확히 3등분이라고 가정했을 때 a-a`, a`-b`, b`-b의 거리는 일정하지 않습니다.
그렇기에 나온 것이 구면 선형 보간입니다.
각 지점을 연결해 그 거리를 나누는 것이 아닌 구체의 중심에서부터 호의 거리를 선형적으로 보간해서 위치를 얻어내는 것입니다.
그렇기 때문에 2D에서는 구체라는 개념이 있을 수가 없기 때문에 SLerp를 사용할 수 없는 것입니다.
어쩌다 보니 설명이 너무 길어졌습니다. 허허허
이처럼 오늘은 tranform의 4가지 컴포넌트인 MoveTowards, SmoothDamp, Lerp, SLerp에 대해서 알아보았습니다.
각 방법마다 특징과 어디에 주로 쓰이는지에 대해서도 알아봐야겠습니다.
오늘은 그럼 여기까지 하도록 하겠습니다.
다음 시간에~~~~~~~~~~~~ 계속
'TIL > 유니티' 카테고리의 다른 글
오브젝트 움직이기(4) (0) | 2020.10.07 |
---|---|
오브젝트 움직이기(2) (0) | 2020.09.22 |
오브젝트 움직이기(Input) (0) | 2020.09.19 |
2D 애니메이션 (2) (0) | 2020.09.01 |
2D 애니메이션 (0) | 2020.09.01 |
댓글