본문으로 건너뛰기

마그넷 캐치 기능 구현 설계

목적​

마그넷 캐치 능력으로 금속 물리 오브젝트 하나를 원거리에서 선택, 잡기, 이동, 거리 조절, 놓기 할 수 있게 한다. 첫 적용처는 마그넷 캐치 챌린지이며, 대상 탐색과 조작 해제 규칙은 이후 능력에서도 재사용할 수 있게 유지한다.

구현 범위​

  • 물리 시뮬레이션을 사용하는 금속 블록 1~2개
  • 카메라 중앙 조준을 통한 대상 탐색과 선택 강조
  • 한 번에 하나의 대상 잡기
  • 카메라 앞 목표 위치로 이동
  • 마우스 휠 거리 조절
  • 놓기, 취소, 능력 전환, 사망, 레벨 재시작 시 안전한 해제
  • 벽 가림, 거리 제한, 비대상 물체 제외

직접 회전, 다중 대상 조작, 금속 외 재질 상호작용은 이번 범위에 포함하지 않는다.

권장 구조​

초기 구현은 Actor Tag와 UPhysicsHandleComponent를 사용한다.

UMagnesisAbility (UPlayerAbilityComponent가 생성·선택)
├─ UPhysicsHandleComponent: 잡은 물리 오브젝트 이동
├─ 대상 탐색: 카메라 중앙 Line Trace
├─ 선택 상태: 현재 후보와 잡은 대상 관리
└─ 거리 상태: 목표 위치의 최소·최대 거리 관리

금속 물리 오브젝트
├─ ReactionType: MagnesisTarget
├─ Simulate Physics: 활성화
└─ 선택 강조 처리: 머티리얼 또는 외곽선 피드백

마그넷 캐치 대상 여부와 대상 반응은 액터의 AbilityReactionComponent에서 판정한다. ReactionType이 MagnesisTarget인 액터만 실제 조준·잡기 대상이다. 실제 잡기·입력·물리 이동은 플레이어의 마그넷 캐치 능력이 담당한다.

상태 흐름​

일반 모드
→ AbilityUse: 마그넷 캐치 모드 진입·대상 탐색
→ MagnesisTargeting: 유효 대상 탐색
→ Interact: 유효 대상 선택
→ MagnesisHolding: 대상 이동·거리 조절

MagnesisTargeting / MagnesisHolding
→ Cancel: 마그넷 캐치 종료 후 일반 모드
→ AbilityUse 재입력 또는 능력 변경: 마그넷 캐치 종료 후 선택 상태 갱신

공격 모드
→ 공격 종료 후 일반 모드
  • MagnesisTargeting 중에는 매 프레임 후보를 갱신한다.
  • 후보가 변경되면 이전 후보의 강조를 해제하고 새 후보만 강조한다.
  • MagnesisHolding에 진입하면 선택한 대상은 유지한다.
  • Cancel과 Attack은 모두 마그넷 캐치 대상 해제, 강조 해제, UI 종료를 먼저 처리한다.
  • Cancel은 일반 모드로 돌아가고, Attack은 마그넷 캐치를 먼저 해제한 뒤 별도의 공격 처리를 실행한다.
  • 유효 대상과 현재 잡은 대상은 별도 상태값이 아니라 Trace 결과와 PhysicsHandle->GetGrabbedComponent()로 확인한다.

능력 선택​

능력 선택은 IA_AbilityWheel을 누르는 동안 UI에서 수행하고, 놓을 때 적용한다. 선택된 마그넷 캐치는 IA_AbilityUse로 조준 모드에 들어간다. 입력 매핑은 입력 시스템을 따른다.

조작 원칙과 조정 기준​

참고 자료는 마그넷 캐치 조작의 순서와 피드백 원칙을 확인하는 용도로만 사용한다. Project Durian은 고유한 입력, UI, 아트와 퍼즐 해법으로 구현한다.

조작 원칙Project Durian 적용
능력을 먼저 활성화한 뒤 대상을 찾는다.선택한 마그넷 캐치 능력에서 IA_AbilityUse로 MagnesisTargeting에 진입한다.
조작 가능한 대상만 눈에 띄게 구분한다.MagnesisTarget 대상만 강조하고, 그 외 물체는 선택하지 않는다.
대상 선택과 대상 조작을 분리한다.유효 후보를 IA_Interact로 선택한 뒤에만 MagnesisHolding에 진입한다.
대상 이동과 거리 조절은 별개다.IA_Look으로 카메라 방향을 바꾸고, 대상은 카메라 앞 목표 위치를 따라간다. IA_MagnesisDistance로 거리만 조절한다.
취소는 조작 전체를 끝낸다.IA_Cancel은 대상 해제·강조 해제·마그넷 캐치 UI 종료 뒤 일반 모드로 전환한다.

다음 항목은 참고 자료에서 복제하지 않고 테스트 레벨의 실제 조작감으로 결정한다.

  • 카메라 기준 대상 이동 방식과 이동 속도
  • 대상 탐색·조작 거리, 휠 한 단계 거리 변화량
  • Physics Handle 강성·감쇠, 최대 허용 질량
  • 강조 색상·형태, 마그넷 캐치 활성화와 대상 조작 UI
  • 공격 입력이 마그넷 캐치를 종료하고 공격 모드로 전환할 때의 전환 시간

참고 내용은 내부 챌린지 리소스 통합 문서의 능력·챌린지 기믹 참고 항목을 따른다.

대상 탐색 규칙​

  1. 플레이어 카메라 위치에서 화면 중앙 방향으로 최대 탐색 거리까지 Line Trace한다.
  2. 첫 충돌한 액터의 ReactionType이 MagnesisTarget인지 확인한다.
  3. 충돌 컴포넌트가 물리 시뮬레이션 중인지 확인한다.
  4. 대상과 플레이어 사이에 별도의 차단물이 없는지 확인한다. 기본 Line Trace에서 먼저 맞은 물체만 후보로 사용하면 벽 뒤 선택을 막을 수 있다.
  5. 추후 질량 제한을 도입하면 물리 바디 질량이 한도 이하인지 검사한다.

Trace 채널은 마그넷 캐치 조준 전용 채널을 만드는 방법과 기존 Visibility 채널을 쓰는 방법이 있다. 초기 구현에서는 Visibility를 사용하고, 조준이 불필요한 오브젝트가 늘어날 때 전용 채널로 분리한다.

잡기와 이동​

잡기​

  • 조준 후보가 있고 아직 물체를 잡지 않았을 때만 잡기를 시작한다.
  • 빈 곳이나 잘못된 대상을 상호작용하면 맞은 지점 또는 최대 탐색 거리까지 짧은 마그넷 빔을 재생하고 조준을 취소한다.
  • 적중한 Primitive Component와 Hit Location을 UPhysicsHandleComponent에 전달한다.
  • 대상이 플레이어와 충돌해 불안정해질 경우, 잡는 동안에만 플레이어 충돌을 완화한다.

목표 위치​

매 프레임 다음 위치를 계산해 Physics Handle의 목표 위치로 설정한다.

카메라 위치 + 카메라 정면 방향 × 현재 거리

카메라에서 목표 위치까지 Sphere Trace 또는 대상 크기 기반 Sweep을 수행한다. 충돌이 있으면 충돌 지점 직전으로 목표 위치를 줄인다. 이 검사는 블록이 벽·천장을 통과하는 문제를 줄인다.

거리 조절​

  • IA_MagnesisDistance 입력으로 현재 거리를 증감한다.
  • 거리는 최소·최대 값으로 제한한다.
  • 이동 중에도 매 프레임 가림 검사를 적용한다.
  • 조절 단위는 작은 고정값으로 시작하고, 실제 플레이에서 조작감에 맞춰 조정한다.

종료와 취소​

  • IA_Cancel은 현재 물체를 놓고 마그넷 캐치 UI·효과를 종료한 뒤 일반 모드로 돌아간다.
  • 공격 명령은 현재 물체를 놓고 마그넷 캐치 UI·효과를 종료한 뒤 별도의 공격 처리로 넘어간다.
  • 대상 조작 중 Interact는 별도 동작을 하지 않는다. 대상 이동과 거리 조절, 취소, 공격만 처리한다.
  • 레벨 재시작, 사망, 클리어는 마그넷 캐치 대상 해제와 UI 종료를 먼저 처리한다.

입력 규칙 참조​

입력 액션, 키 매핑, 능력별 입력 순서는 입력 시스템을 단일 기준으로 사용한다. 이 문서에서는 마그넷 캐치 구현이 요구하는 상태 전환과 물리 처리를 설명하며, 입력 이름을 별도의 표로 다시 정의하지 않는다.

조정값​

초기값은 코드 또는 블루프린트에서 쉽게 변경할 수 있게 노출한다. 수치는 테스트 맵에서 실제 조작 후 확정한다.

값의미
탐색 거리조준 Trace의 최대 길이
최소·최대 조작 거리잡은 물체가 유지될 거리 범위
휠 1단계 거리 변화량거리 조절 감도
Physics Handle 강성목표 위치를 따라가는 힘
Physics Handle 감쇠떨림과 과도한 반동 억제
최대 허용 질량너무 무거운 대상 제외 기준
목표 위치 Sweep 반경벽 관통 방지 여유

물체 직접 회전은 제공하지 않는다. Handle의 회전 목표는 갱신하지 않고, 물체의 자세는 물리 상태를 유지한다.

피드백​

  • 유효 후보: 금속성 외곽선 또는 색상 강조
  • 잡기 중: 후보 강조와 구분되는 지속 효과
  • 거리·가림·질량 제한으로 사용할 수 없음: 짧은 비활성 피드백
  • 놓기: 잡기 효과 제거

강조 구현은 대상 액터 또는 블루프린트에 맡긴다. 마그넷 캐치 시스템은 선택됨, 잡힘, 해제됨 같은 상태만 전달해 머티리얼 구현과 결합하지 않는다.

안전성과 재시작​

  • 재시작 전에 반드시 Handle을 해제한다.
  • 챌린지 물리 오브젝트의 초기 Transform은 레벨 재로드로 복구한다.
  • 블록이 낙하·유실·끼임 상태가 되면 메뉴(Backspace)의 재시작으로 해결한다.
  • 문, 압력판, 클리어 처리 중에도 물체가 잡혀 있을 수 있으므로 모든 전환 지점에서 공통 해제 함수를 호출한다.

구현 순서와 완료 기준​

  1. 마그넷 캐치 대상 블록에 MagnesisTarget 반응과 물리 충돌을 설정한다.
  2. 플레이어에 UPhysicsHandleComponent를 추가한다.
  3. MagnesisTargeting에서 중앙 Trace, 후보 관리, 강조를 구현한다.
  4. IA_Interact로 유효 후보를 Activate하고 MagnesisHolding에 진입하게 한다.
  5. 카메라 기준 대상 이동, IA_MagnesisDistance 거리 조절, 목표 위치 Sweep을 추가한다.
  6. Cancel, Attack, 사망, 재시작의 공통 마그넷 캐치 종료 처리를 연결한다.
  7. 압력판과 문이 잡은 블록 상태에도 안정적으로 반응하는지 확인한다.

다음 조건을 실제 플레이로 확인하면 완료다.

  • 벽 뒤, 거리 밖, 비금속 물체를 선택하지 않는다.
  • 블록 하나를 안정적으로 잡고, 장애물 너머와 압력판 위로 옮겨 놓을 수 있다.
  • 물체가 벽·천장을 뚫거나 지속적으로 심하게 떨리지 않는다.
  • 취소 또는 재시작 뒤 선택 강조와 Physics Handle이 남지 않는다.

관련 문서​