WWolves Den

Control Rig · 약 3분

FootTrace 함수: 바닥 높이를 구할 때 놓치기 쉬운 것

Sphere Trace의 공간·채널·성공 여부를 명시하여 양발이 공유할 수 있는 지면 조사 함수를 만듭니다.

Wolfgadeok · 업데이트

함수의 계약부터 정하기

FootTrace는 특정 발의 기준 위치를 받아 지면 접촉 결과를 반환하는 함수로 분리할 수 있습니다. 왼발·오른발을 따로 복사한 그래프보다 같은 함수를 두 번 호출하는 쪽이 추적 거리나 실패 처리를 일관되게 유지하기 쉽습니다. 입력에는 발을 나타내는 Rig Element Key나 위치, 출력에는 성공 여부와 접촉 위치를 포함시킵니다. 성공하지 않은 HitLocation을 유효한 바닥처럼 사용하지 않는 것이 첫 조건입니다.

시작점은 발 기준보다 위, 끝점은 그보다 아래에 둡니다. 위쪽 범위가 너무 짧으면 이미 올라온 턱을 찾지 못하고, 아래쪽이 지나치게 길면 접근 불가능한 아래층까지 목표로 삼을 수 있습니다. 위 30, 아래 50, 발 앞쪽 5처럼 거리를 정하더라도 메시의 크기와 축에 맞는지 확인해야 합니다. 발목에서 발바닥까지의 실제 높이와 발의 진행 방향을 현재 메시에서 측정합니다.

같은 이름의 Trace라도 공간을 확인하기

공식 Control Rig Sphere Trace By Trace Channel 노드는 시작·끝·결과를 rig/global 공간으로 설명합니다. 반면 일반 게임플레이 Blueprint의 Trace를 다른 함수에서 호출했다면 그 노드의 월드 공간 계약을 따라야 합니다. 결과가 작은 상대값으로 나온다는 이유만으로 모든 Trace가 같은 공간을 사용한다고 가정하면 안 됩니다. 함수 설명에 사용하는 노드 종류와 좌표계를 함께 적어 둡니다.

Trace Channel은 무엇을 바닥 후보로 볼지 정하는 질의 필터입니다. Visibility를 사용한다면 바닥 컴포넌트의 해당 채널 응답을 확인하고 자신의 캡슐·메시가 결과를 가리지 않는지 검사합니다. 모든 Pawn이 언제나 Visibility를 무시한다는 보장은 없습니다. 프로젝트에서 바뀐 Preset, 장비나 방패의 충돌, 새로 추가한 장식물이 최초 히트가 될 수 있습니다.

Control Rig의 Sphere Trace By Trace Channel 노드에서 Visibility 채널을 선택한 화면
지면 조사 노드의 채널 선택 부분입니다. Visibility는 검사 대상을 거르는 기준이며, 실제 함수에서는 Hit 성공 여부를 확인한 뒤 접촉 결과를 사용해야 합니다. 이전 버전의 에디터 화면으로, 현재 버전과 메뉴 배치가 다를 수 있습니다. 이미지를 누르면 크게 볼 수 있습니다.

접촉 위치를 발 오프셋으로 바꾸기

접촉 위치 그 자체가 언제나 발목 오프셋은 아닙니다. 구체의 중심, 표면 접촉점, 발바닥 높이 중 어떤 값을 반환하고 어떤 값을 기준으로 빼는지 일치시켜야 합니다. 먼저 평지에서 최종 오프셋이 의도한 기본 자세를 유지하는지 확인한 뒤 경사에 적용합니다. 접촉면 법선을 활용해 발 회전까지 보정하려면 높이 보정과 따로 제한 각도와 보간을 둡니다.

  1. 평지에서 양발 모두 히트하고 자기 몸을 맞히지 않는지 확인합니다.
  2. 계단 모서리에서 반지름을 바꾸며 결과가 튀는지 비교합니다.
  3. 히트 실패에는 유효하지 않은 위치 대신 정해진 복귀 정책을 적용합니다.
  4. 디버그 선은 개발 중에만 켜고 실제 게임에서는 필요한 빈도만 조사합니다.

참고 자료