본문 바로가기
포트폴리오/Project K (팀 프로젝트, UE5)

[개발자 노트] 상호작용 컴포넌트 구현 및 기능 테스트 (4월 4주차)

by 섬댕이 2024. 4. 30.
상호작용 오브젝트 (Interactable Object) 상속 구조 변경 작업

상호작용 가능 오브젝트를 개발 편의상 3 가지 분류로 구분하도록 상속 구조 변경, 불필요한 코드 간소화 작업

토글 작동형 오브젝트 (AToggleableObjectBase 파생)

소유 가능 오브젝트 (AOwnableObject 파생)

키다운 작동형 오브젝트 (AKeyDownableObjectBase 파생)

* 빨간색 표시 클래스 = 추후 구현 예정

 


 

상호작용 컴포넌트(UInteractionComponent)

플레이어 클래스에 부착하여 상호작용 기능을 관리할 목적의 컴포넌트를 구현하고, 키 입력에 대한 액션 바인딩 (플레이어 컨트롤러) 및 입력에 따른 컴포넌트 작동을 위한 코드를 플레이어, 플레이어 컨트롤러 클래스에 코드를 추가하였음

 

UInteractionComponent의 상호작용 메커니즘
  • 컴포넌트 틱에서 trace를 사용해 플레이어 컨트롤러 전방 방향의 USceneComponent를 항상 검사
  • 검사된 USceneComponent의 parent actor를 찾아 IInteraction 인터페이스를 상속받는지 검사
  • IInteraction 인터페이스를 가지면 오브젝트를 Target에 저장하고 그렇지 않다면 nullptr를 저장
  • 키 입력이 주어졌을 때 Target이 유효한 경우, Target의 Interact 메서드를 호출 (인터페이스 콜)

 

AInteractableObjectBase 파생 클래스의 상호작용 메커니즘
  • Interact 메서드 호출 시, CanInteract() 메서드를 통해 다음과 같이 상호작용 가능 여부 판단
    • 기존 상호작용 중인 Instigator가 존재하는지 판단 (중복 상호작용 방지 목적)
    • 전달된 Instigator가 해당 오브젝트로부터 InteractionLimit 내에 존재하는지 판단
  • 상호작용이 가능하면 전달된 Instigator를 상호작용이 완료될 때까지 저장
  • 상호작용이 완료되면 Disinteract()를 통해 Instigator를 nullptr로 초기화한 뒤 상호작용 종료
  • 파생 클래스에서는 목적에 맞게 BlueprintNativeEvent Interact의 C++ 버전을 재정의하여 구현

 


 

토글형 문 클래스 마무리 작업 및 테스트

상호작용 키 입력 및 그에 따른 컴포넌트, 오브젝트의 구현 기능이 실제로 잘 작동하는지 테스트

 

 

댓글