본문 바로가기
공부/Unreal Engine 5

[언리얼5] 클래스별 주로 구현하는 인터페이스 기능

by MY블로그 2024. 5. 27.

인터페이스는 객체 간의 상호 작용을 위한 명확한 계약을 제공.

특정 기능을 강제하는 방법으로 사용.

 

언리얼 엔진에서 CPP로 게임 개발을 진행할때 대략적인 클래스별로 자주 구현하는 인터페이스 기능.

(네이밍은 프로그래머에의해 정해지며, 예시 네이밍은 기능과관련하여 알아보기위한 예/접두사는I)

 

플레이어 클래스에 주로 구현하는 인터페이스

IInteractable

플레이어가 상호작용할 수 있는 객체들(예: 아이템을 줍거나, 문을 여는 등)과의 인터페이스입니다. Interact 메소드를 포함할 수 있습니다.


IMovable

플레이어의 움직임을 처리하는 인터페이스입니다. Move, Jump 등의 메소드를 포함할 수 있습니다.


IHealth

플레이어의 생명력을 관리하는 인터페이스입니다. TakeDamage, Heal 등의 메소드를 포함할 수 있습니다.

 

몬스터(적) 클래스에 주로 구현하는 인터페이스

IAttackable

공격 기능을 가진 캐릭터나 오브젝트의 인터페이스입니다. Attack, CanAttack 등의 메소드를 포함할 수 있습니다.


IPatrollable

일정 영역을 순찰하는 로직을 구현하는 인터페이스입니다. StartPatrol, StopPatrol 등을 포함할 수 있습니다.


IDamageable

데미지를 받을 수 있는 인터페이스입니다. TakeDamage 메소드를 포함할 수 있습니다.

 

탈것이나 오브젝트 클래스에 주로 구현하는 인터페이스

IVehicleControl

탈것의 조작과 관련된 인터페이스입니다. StartEngine, StopEngine, Turn, Accelerate 등의 메소드를 포함할 수 있습니다.


IActivatable

활성화 및 비활성화가 가능한 오브젝트의 인터페이스입니다. 예를 들어, 스위치나 레버 같은 것들입니다. Activate, Deactivate 메소드를 포함할 수 있습니다.

 

일반적으로 사용되는 인터페이스

IDestroyable

파괴될 수 있는 모든 객체에 적용될 수 있는 인터페이스입니다. Destroy 메소드를 포함할 수 있습니다.


ISaveable

게임 상태 저장 시, 저장되어야 할 데이터를 관리하는 인터페이스입니다. Save, Load 메소드를 포함할 수 있습니다.

 

CPP 코드로 구현하는 예시

별도의 인터페이스 클래스를 만들어서 관리.

인터페이스는 UInterface 클래스를 상속 받는다.

좌 : UObject 를 상속받는 UInterface / 우 : UInterface 를 상속받는 커스텀 인터페이스

인터페이스가 필요한 클래스는 상속 or 다중 상속을 통하여 인터페이스를 상속 받는다.

아래의 APlayerCharacter의 경우 ABaseCharacter를 상속받는데, 또다른 인터페이스는 상위클래스에서 상속을 받고 있기 때문에 플레이어 클래스에서 다중 상속을 사용하지 않은 예제.

이후 해당 클래스에서 인터페이스의 함수들을 재정의(override)하여 사용 한다.
인터페이스 자체에서는 초기화 혹은 아무기능도 하지 않는 함수자체를 정의 하도록 한다.

좌 : 아무기능하지 않는 빈 함수정의 / 우 : 플레이어 클래스에서 인터페이스 함수 재정의(override)하여 사용

서로다른 클래스간에 같은 인터페이스 상호 작용 예시.

아이템 클래스에서 다른액터(ex.플레이어)와 오버랩 발생시. 플레이어와 오버랩된 아이템이 상호작용.

엔진 블루프린트를 사용하여 인터페이스 구현

언리얼 공식 문서 참고
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/implementing-blueprint-interfaces-in-unreal-engine

 

언리얼 엔진에서 블루프린트 인터페이스 구현하기 | 언리얼 엔진 5.4 문서 | Epic Developer Community

블루프린트 인터페이스는, 블루프린트에서 유형이 다른 타깃 블루프린트의 함수도, 같은 인터페이스를 구현하기만 한다면 호출할 수 있도록 해 줍니다.

dev.epicgames.com

 

 

댓글