본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 45. 커스텀 컴포넌트 만들기


목차

  1.  커스텀 컴포넌트를 만드는 이유
  2.  커스텀 컴포넌트 만들기

1. 커스텀 컴포넌트를 만드는 이유

 

커스텀 컴포넌트가 왜 필요할까? 플레이어든 적이든 클래스 마다 필요한 속성들이 있을 것이다. 그리고 그러한 속성 중 모든 클래스에게 필요한 속성들도 있을 것이다.

 

체력 속성이 대표적이며 이러한 기능들을 각각의 클래스마다 따로 만들면 비효율적이고 객체지향프로그래밍 사고에도 맞지 않는다.

 

그렇기 때문에 커스텀 컴포넌트를 추가하여 필요한 클래스에서 Add 하여 기능을 사용하도록 할 것이다.

 


2. 커스텀 컴포넌트 만들기

 

C++ 클래스를 만들어보자.

 

부모 클래스를 살펴보면 Actor 컴포넌트가 있는것을 볼 수 있다.

 

 

액터 컴포넌트의 이름은 AttributeComponent로 지정하였다.

 

컴포넌트를 만들었으니 속성(변수)을 만들어주자.

 

private:
	// 현재 체력
	UPROPERTY(EditAnywhere, Category = "Actor Attribute")
	float Heath;
    
	//  전체 체력
	UPROPERTY(EditAnywhere, Category = "Actor Attribute")
	float MaxHeath;

 

체력 변수들을 선언해주었다. 이제 이 컴포넌트를 에너미 클래스에 추가하려고 한다.

 

네머지 클래스로 돌아간 뒤 우리가 그동안 컴포넌트를 추가했던 것처럼 단순히 포인터로 컴포넌트 변수를 추가해주면 된다.

 

class PRACTICE_API AEnemy : public ACharacter, public IHitInterface
{
	// ...
private:
	UPROPERTY(VisibleAnywhere)
	class UAttributeComponent* Attributes;
// 생성자

Attributes = CreateDefaultSubobject<UAttributeComponent>(TEXT("Attributes"));

 

액터 컴포넌트는  실체가 존재하는 것이 아니기 때문에 따로 Attach를 할 필요가 없다.

 

 

컴파일하면 액터컴포넌트가 생긴 것을 볼 수 있다.

이제 Attribute 컴포넌트가 생겼으니 체력바를 만들어 현재 체력을 볼 수 있게 해보자.