메카닉 딥다이브 프로젝트 일지: 11~13일차

April 3, 2026 (4d ago)

0 views

오늘 목표

  • 락온 완성
    • 락온 마커
    • 락온 상태 회피 8방향
    • 구르기 Forward, ForwardLeft, ForwardRight

현재 구르기의 문제점

  • 구르기 모션 재생 시 카메라와 분리됨
  • CombatCore.FinishDodge에서 OnDodgeFinished 이벤트를 디스패칭해주고 있는데 받는 쪽이 아무도 없음

락온 정상화

마커(위젯) 붙임

코덱스는 위젯을 뷰포트에 생성한 다음 Update함수를 EventTick마다 호출해서 좌표를 최신화하라고 했는데, 유튜브 튜토리얼은 위젯을 액터로 생성한 다음 락온 대상 액터에 attach하게 했음. 이게 더 가볍고 마음에 들어서 이걸로 채택

가까이 붙으면 카메라가 내려가는 문제가 있었음 그리고 캐릭터 숨쉴 때마다 카메라도 같이 들썩임;

문제의 원인은 GetTargetAimPoint 함수였음

fallback이 아니면 설정된 spine_05의 location을 반환하게 했는데, spine_05 뼈가 계속 들썩거리니까 카메라도 같이 들썩거렸던 것

P의거짓은 어떨지 테스트해보니 뼈를 락온 타겟으로 잡지 않는듯 함

락온 스위칭

P의 거짓에서 락온 스위칭은 아주 잘된다. 핵심은 생각할 필요 없이 움직이는대로 이동을 해야함

그래서 구현했는데 감도가 매우 이상했음. 마우스를 충분히 좌우로 휘두르고 있는데 어느땐 금방 넘어가고 어느땐 잘 안넘어감. 문제는 IA_Look XY축 입력에 대해 게임패드 썸스틱과 마우스 스윙이 다르다는 것을 고려하지 않았기 때문에 발생했음.

  • 마우스는 프레임별 이동량
  • 게임패드 스틱은 기울기로 입력값 처리 따라서 InputAction을 마우스와 게임패드 각각으로 나눠 처리하기로 함

AI를 통해 알아낸 마우스와 게임패드 스틱 조작 개선점:

  1. 마우스는 프레임 입력값을 바로 쓰지 말고 누적값을 따로 저장할 것
  2. 누적값이 임계치에 도달했을 때만 1회 스위칭
  3. 한 번 스위칭한 뒤 짧은 재입력 대기 시간을 두기
  4. 입력이 완전히 멈췄을 때 누적값 초기화
  5. 마우스 락온 스위치는 X축만 쓰는게 좋아보임 실제 P의거짓을 해봤을 때 락온 스위칭은 Y축도 입력되는걸 확인했기 때문에 5번만 제외하고 수용하기로 했다

잘 되는듯 싶었으나

후보들이 가까워졌을 때 마우스를 설정 임계값 밑으로 움직이다가 크게 스와이프하면 노이즈들이 의도한 스와이프와 섞여서 짤과 같이 진동(jangle)하는 문제가 있었음

  • 실제 스와이프와 방향이 다른 노이즈들은 필터해주고,
  • PreviousLockedTarget을 로컬변수로 저장해 스위칭 후보군에서 필터 조건에 추가해줌
  • 그래도 여전히 진동이 나타나서 스위칭 성공 시 bMouseNeedsReleasebMouseCooldownFinished 플래그를 사용해 릴리즈 구간을 확보해줬다

락온 스위칭 성공 후 잔여 마우스 무빙으로 호출되는 HandleLockOnSwitchFromMouse에서 의도와 다르게 잔여 무빙으로 스위칭이 또 발생하지 않도록 bMouseNeedsRelease == trueMouseReleaseThreshold(0.2f) 밑으로 줄어들 때까지 + 정해둔 쿨다운 시간이 지날 때까지 실행을 유보하게 해 진동을 막을 수 있었다

완성!

카메라붐 위치 조정

카메라붐 위치도 바꿈

  • 플레이어캐릭터 머리가 화면 정가운데 위치하게

카메라 회전 멀미 이슈

카메라 회전도 멀미나고 있었음

그 이유는 Roll Pitch Yaw축 중에 Roll 축 회전을 무시하지 않고 있어서 3방향으로 흔들리고 있었다는거임

레퍼런스에선 같은 궤적으로 마우스를 흔들어도 안정적임

Use Controller Rotation Yaw를 꺼주고 카메라가 땅에 닿아 줌인되지 않게 소켓 위치를 조정해줘서 해결함


Reference: 공격 파티클

락온 걷기/스트레이프

락온 전력질주