본문 바로가기
Unreal/Manual

Unreal 아군, 적군, 중립 구별 TeamID 설정하기

by Dev_카페인 2024. 2. 6.
반응형

[Unreal/C++] 아군, 적군, 중립 구별 TeamID 설정하기 

 

이전 글에서는 uint8로 Team ID를 설정했다.

하지만 Interface와 별개로 uint8을 정의해서 만든 것이라 추후 문제가 발생할 가능성이 있다.

이번에는 인터페이스를 오버라이드 하여 제대로 사용한다.

 

Unreal에서 AI를 구현하거나 아군, 적군, 중립을 설정하기 위해 TeamID라는 것이 필요하다.

AIController를 상속받는 클래스라면 크게 신경쓰지 않아도 되지만 상속받지 않는 클래스는 인터페이스를 상속받고 구현해야한다.

 

 

 

 

#include "GenericTeamAgentInterface.h" 헤더를 추가하고

IGenericTeamAgentInterface 인터페이스를 상속받는다.

일반 클래스는 다중 상속이 불가능하지만 인터페이스는 다중상속이 가능하다.

 

 

 

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "GenericTeamAgentInterface.h"			// generated.h 위에 헤더 추가
#include "ACharacterBase.generated.h"

UCLASS()
class MULTIPLAYER_API ACharacterBase : public ACharacter, public IGenericTeamAgentInterface	// 인터페이스 상속
{
	GENERATED_BODY()
    
public :
	// ~Begin IGeneric Team Agent Interface
	/** 지정된 TeamID에 팀 에이전트를 할당합니다. */
	virtual void SetGenericTeamId(const FGenericTeamId& TeamID) override;
	/** FGenericTeamId 형식으로 팀 식별자를 검색합니다. */
	virtual FGenericTeamId GetGenericTeamId() const override;
	// ~End IGeneric Team Agent Interface

protected :
	/* IGeneric Team Agent Interface */
	UPROPERTY(VisibleDefaultsOnly, Category = "AI")
		FGenericTeamId GenericTeamID;
}

 

 

IGenericTeamAgentInterface 클래스를 확인해보면 override 가능한 함수들이 있다.

 

 

 

이 중 SetGenericTeamId 를 통해 설정을 해도 되지만

GetGenericTeamId 함수를 통해 설정한 TeamID(uint8) 값만 던져주면 된다.

-> FGenericTeamId 구조체를 사용하여 Get, Set함수를 구현한다.

-> 위 Get, Set함수를 보면 Set은 구현이 안되어있고 , Get은 NoTeam(255)를 반환하기 때문에 중립이다.

 

함수를 오버라이드 해주고

 

필요에 따라 생성자에서 팀 아이디를 정해 놓습니다.

정하지 않을 경우 255의 기본 값을 가지고 있습니다.

오버라이드 한 GetTeamId와 SetTeamId입니다.

 

 

TeamID는 0~255까지 설정 가능하다.

- 같은 TeamID를 가지고 있으면 아군

- 다른 TeamID를 가지고 있으면 적군

- 예외로 255의 TeamID를 가지고 있으면 중립이다.

 

 

보통 AI Sense 에서 사용합니다.

 

 

 

 

IGenericTeamAgentInterface

 

docs.unrealengine.com

 

 

IGenericTeamAgentInterface::SetGenericTeamId

Assigns Team Agent to given TeamID

docs.unrealengine.com

 

 

IGenericTeamAgentInterface::GetGenericTeamId

Retrieve team identifier in form of [FGenericTeamId](API\Runtime\AIModule\FGenericTeamId)

docs.unrealengine.com

 

반응형