게임프로그래밍/실습1
[언리얼 실습] 45. 커스텀 컴포넌트 만들기
우승자는메이
2024. 11. 1. 16:48
목차
- 커스텀 컴포넌트를 만드는 이유
- 커스텀 컴포넌트 만들기
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 컴포넌트가 생겼으니 체력바를 만들어 현재 체력을 볼 수 있게 해보자.