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

[개발자 노트] 상호작용 오브젝트 클래스 설계, 토글형 문 오브젝트 클래스 구현 (~4월 3주차)

by 섬댕이 2024. 4. 23.

 

상호작용 오브젝트 (Interactable Object) 클래스 설계

다음과 같은 사항을 고려하여 인터페이스 및 클래스를 설계.

  • 플레이어와의 상호작용을 위한 기능을 인터페이스로 분리
  • 플레이어가 소유한 상태로 오브젝트를 활용하는 기능을 인터페이스로 분리
  • 공통된 부분은 기반 클래스의 멤버 및 메서드로 가질 수 있도록 하고자 하였음
  • 유사한 오브젝트여도 작동 메커니즘 또는 상호작용 방식이 완전히 다르면, 다른 클래스로 파생되도록 하여 각 인스턴스를 인게임에 배치하여 활용하는 레벨 디자이너가 쉽게 구분할 수 있도록 하고자 하였음
  • 레벨 디자이너와 협의 결과, 애셋에서 문 부분을 제거하고 신규 액터를 배치하기로 결정됨에 따라 DefaultSceneRoot의 하위 프로퍼티로서 메시 컴포넌트를 보유하도록 설계

 

* ToggleableDoorObjectBase 파생 클래스들의 추가 기능 구현 예정 (플레이어 클래스와의 상호작용 관련).

* ToggleableDoorObjectBase 파생 클래스를 제외한 나머지 오브젝트들의 경우에는 수정될 수 있음.

 


 

토글형 문 오브젝트 클래스

토글 방식으로 작동하는 문 오브젝트 3종을 구현하여 기본적인 작동을 테스트하였음

  • 플레이어가 상호작용 키를 입력할 때마다 열리거나 닫히는 문 오브젝트 3  종 구현: 여닫이, 미닫이, 복합여닫이
  • 플레이어와 상호작용 하는 방식은 추후 팀 회의를 통해 결정, 플레이어 상호작용 컴포넌트에 기능 구현 예정
  • 스태틱 메시를 레벨 디자이너가 에디터 상에서 지정할 수 있도록 UPROPERTY() 로 지정

 

여닫이 문 클래스 (ToggleableHingedDoor)
  • 레벨 디자이너가 OpenAngle (왼쪽 문의 yaw angle을 기준으로 하는 값)을 설정하여 배치
  • OpenAngle > 0인 경우: 당겨서 여는 문
  • OpenAngle < 0인 경우: 밀어서 여는 문

 

미닫이 문 클래스 (ToggleableSlidingDoor)
  • 레벨 디자이너가 에디터 (뷰포트) 상에서 닫힌 상태 기준, 양측 문의 relative location을 설정하여 배치
  • 왼쪽 문과 오른쪽 문을 배치할 때, 로컬 좌표계 X 방향으로 문이 열고 닫히도록 배치해야함
  • 뷰포트에서 설정된 두 스태틱 메시 사이 거리의 절반만큼 문이 열고 닫히도록 자동 설정 (BeginPlay() 메서드)
  • 현재 오른쪽 문만 열고 닫히도록 구현하여, 양쪽 문이 자유롭게 열고 닫히도록 하기 위해서는 추가 구현 필요

 

복합여닫이 문 클래스 (ToggleableComplexDoor)
  • 레벨 디자이너가 OpenAngle (왼쪽 문의 yaw angle을 기준으로 하는 값)을 설정하여 배치
  • OpenAngle > 0인 경우: 당겨서 여는 문
  • OpenAngle < 0인 경우: 밀어서 여는 문
  • 기존의 왼쪽, 오른쪽 문에 각각 하위 메시 (서브 메시)를 추가
  • 문이 열고 닫힐 때 서브 메시들이 기존 메시들과 반대 방향으로 회전하도록 구현

 

* 좌측부터 여닫이, 미닫이, 복합여닫이 문 클래스의 블루프린트 클래스를 레벨에 배치하여 테스트 한 영상

댓글