TIL

Kyu_·2026년 6월 19일

30주차

목록 보기
5/5

오늘의 작업

오늘할일 : 아웃런 NPC구현 및 상호작용시 UI띄우기(임시)


상호작용 시스템 — 설계 탐색

현재 구조는 NSInteractableActor가 있고, 어떤 위젯이 붙는지·어떤 컨트롤러가 붙는지·콜리전이나 상호작용 컴포넌트도 붙는 구조 (상속해서 사용하면 됨).

그런데 NPC는 추후 자기 방을 돌아다니거나 움직이는 로직이 필요하기 때문에 ACharacter를 상속받아야 해서 NSInteractableActor 상속 방식은 부적절하다고 판단.

대안으로 컴포넌트에 상호작용 책임을 부여하는 방향을 검토했다. 다만 상호작용 가능한 모든 액터에 컴포넌트를 붙이면 컴포넌트가 주인이 누구인지(NPC인지 파츠인지)를 알아야 하는 문제가 생긴다. 이를 해결하기 위해 인터페이스 도입을 고려 — 컴포넌트는 구체적인 타입은 모르고 인터페이스 여부만 확인하면 된다.

역할 분리 초안:

  • 컴포넌트 — 감지, 프롬프트 표시, 신호 발생
  • 인터페이스 — 물어보면 답할 수 있게끔 (함수 제공, PlayerController 감지 등)

상호작용 시스템 — 최종 설계 확정

위 방식에서 한 번 더 방향을 바꿨다.

상호작용 가능한 액터 각각에 컴포넌트를 붙이는 것보다, 캐릭터에 상호작용 컴포넌트를 달아서 캐릭터가 판단하는 구조가 더 낫다고 결론 냈다.

이유: 상호작용 가능한 액터가 두 개 있고 둘의 콜리전 안에 동시에 들어가 있을 때, 어떤 액터와 상호작용할지 중재하는 주체가 캐릭터 컴포넌트여야 처리가 깔끔하다.

확정 구조:

  • 상호작용 액터: INSInteractable 인터페이스 상속 + Sphere 콜리전만 보유
  • 상호작용 컴포넌트: 캐릭터에 부착, TickComponent로 가장 가까운 액터를 선택
    • TickInterval을 크게 설정해서 갱신 횟수 최소화
  • 동시 범위 진입 시: 캐릭터 위치로부터 가장 가까운 액터와 상호작용
  • 프롬프트 위젯: World 좌표에 부착 (레퍼런스 게임과 동일 방식). HUD 방식은 추후 대화창 등에서 활용 예정

구현한 것

  • INSInteractable 인터페이스 추가
  • NSInteractionComponent — 캐릭터에 부착, 범위 내 액터 감지 + 가까운 대상 선택
  • 기존 NSInteractableActor 리팩터링 — 컴포넌트/콜리전 분리, 인터페이스 상속 구조로 정리
  • NPC에 컴포넌트+인터페이스 조합 적용 가능한 구조 완성

공부한 것

  • TArray를 인덱스로 순회하면서 RemoveAt이 필요한 경우 → 뒤에서부터 순회하면 RemoveAt의 메모리 이동 비용을 줄일 수 있다. 단, 권장 패턴은 아니므로 상황에 따라 판단.
  • 언리얼에서는 이터레이터 호환성 때문에 --i (전위 감소 연산자)를 습관화하는 것이 좋다.

알고리즘

비트 연산자

XOR

XOR는 ^로 정의되어있다.

AND

AND는 &로 정의

OR

OR는 |로 정의

NOT

NOT은 ~로 정의되어있다. (비트반전)

<<

좌측 시프트, 비트들을 왼쪽으로 이동 (빈자리는 0으로 채움)

>>

우측 시프트, 비트들을 오른쪽으로 이동

0개의 댓글