작성
·
736
0
어메이징 볼링 - 타겟 추적기 영상을 수강중에 질문이 있습니다.
SmoothDamp기능에 대한 질문입니다만, 이 smoothDamp라는 것은 Update를 통해서 함수를 몇 번을 실행시키든지, 지정된 시간(영상에서라면 smoothTime변수, 형식에서는 4번째 입력칸)동안은 첫 계산으로 나온 값을 순차적으로 내 보내 주는건가요?
질문이 잘 이해가 안 되실거 같기도 합니다만...
일단 smoothTime = 0.2f로 하고
SmoothDamp가 값을 지정 해 줘야 되는 것은 0.2초간 연속적으로 여야 할 것입니다. (또는 0.2초가 다 지나야 SmoothDamp가 할 일을 다 마친다고 표현해야 될까요)
그런데, 30fps으로 Update함수가 갱신된다고 가정하면 그 0.2초간 Update함수는 6번 작동할 것이고 Move()도 6번 작동하면,
2번째 Move()가 작동하는 시점에서는 아직 1번째 Move()안에 있는 SmoothDamp의 역할이 끝나지 않았을 것이라는 거죠.
또는 완전히 새로 SmoothDamp가 작동한다면 1프레임만큼 시간이 지난 지금부터 새롭게 0.2초간의 계산이 시작될 것 입니다. 그렇다면 1프레임만큼 움직인 위치에서 새롭게 타겟까지의 이동을 0.2초를 통해서 움직이려고 할 것이고요.
결국 이 SmoothDamp라는 것은 하나의 변수값(이 강좌에서는 Vector3 smoothPosition)에 대해서 반복적으로 SmoothDamp값을 넣으라는 요청이 있을 때는, 매 프레임 새로 계산하는 것이 아니라, 처음 실행된(=1프레임째의 Move();) SmoothDamp의 계산값(0.2초간 부드럽게 목표로 향하기 위한 0.2초간의 위치 정보들)을 제공해 준다고 이해해도 좋은 것인지요.
답변 3
4
실시간으로 달라지는 값의 변화량을 그래프 상으로 봤을때 부드럽게 이어지도록 만드려면, 이전 변화량을 알아야한느게 맞습니다. 따라서 SmoothDamp는 변화시킬 현재 값과 목표 값 이외에, ref 키워드로 이전 값의 변화량을 알 수 있으면서 현재 변화량을 기록해 넣을 수 있는 값의 변화량(=속도)을 저장하는 변수를 하나더 받습니다.
아래에서 ref velocity가 거기에 해당합니다.
Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
따라서 이전과 이후 SmoothDamp의 계산이 서로 이어져있는 것이 아닙니다. 그 순간에 모든 계산은 완료됩니다. 다만 직전 실행에서 변화한 값의 양을 변수를 통해 전달받기 때문에 연속적으로 그래프 상에서 부드럽게 이어진 변화를 만들 수 있는 것입니다.
0
0
SmoothDamp의 3번째 값, ref가 달린 값의 용도가 그것이었군요.
저장해 두었다가 다른곳에 쓰는것이 아니라 변수 하나를 저장공간 처럼 이용해서, 다음 프레임의 SmoothDamp에서 전체 이동곡선 중 이번 차례가 언제인지를 확인하는 용도인 것이네요.