참고 문서
컴포넌트 추가 방법
컴포넌트를 생성해서 추가한 다음에, 그 컴포넌트의 속성을 건드리기 위해 변수로 가지고 있는 게 좋다.
1. 헤더에서 변수를 선언해준다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
// 포인터를 사용하기 때문에, Class 전방 선언을 해줌.
class USpringArmComponent;
class UCameraComponent;
UCLASS()
class CPP_AIMOVE_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
public:
UPROPERTY(VisibleAnywhere)
USpringArmComponent* SpringArm;
UPROPERTY(VisibleAnywhere)
UCameraComponent* Camera;
};
2. CPP 생성자에서 컴포넌트를 생성한다.
#include "MyActor.h"
// 헤더를 포함해줘야 Class 사용 가능함.
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
AMyActor::AMyActor()
{
// 생성해서 변수에 담기.
SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
// 생성한 뒤에 어디에 붙일지 정함.
SpringArm->SetupAttachment(RootComponent);
Camera->SetupAttachment(SpringArm);
// 부가 설정.
SpringArm->TargetArmLength = 500.0f;
SpringArm->bUsePawnControlRotation = true;
}
이렇게 하면 블루프린트에서 이렇게 만든 것과 같다.
부가 설명
C++ 생성자에서 뭔가를 하게 되면, 이 액터를 Level에 가져다 놓았을 때의 기본 값이 된다.
위치를 10, 10, 10 으로 바꾸어놓았으면, 디폴트가 10, 10, 10이 된다.
// 생성해서 변수에 담기.
SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
CreateDefaultSubobject 함수
생성자에서만 실행 가능하다.
템플릿으로 <>안에 사용할 컴포넌트를 넣어주면 된다.
TEXT()
각각의 컴포넌트를 구분하기 위한 값이 들어간다.
해쉬 값을 생성하기 때문에, 다른 TEXT와 겹치면 안된다. (TEXT가 같으면, Hash 값도 같아지므로 구분이 안 됨.)
// 생성한 뒤에 어디에 붙일지 정함.
SpringArm->SetupAttachment(RootComponent);
SetupAttachment() 함수
인자의 하위에 위치하게 만든다.
'Unreal' 카테고리의 다른 글
[Unreal Error] Destroy()가 false를 반환하는 경우 (0) | 2021.04.29 |
---|---|
[Unreal Error] GetWorld()가 Null 값을 반환하는 경우 (0) | 2021.04.23 |
[Unreal C++] IWYU 알아보기 (Include-What-You-Use) (0) | 2021.04.15 |
[Unreal BP] AI MoveTo 사용하기 (0) | 2021.04.14 |
[Unreal] 네비게이션 메쉬 설정하기 (Nav Mesh / Nav Link Proxy) (0) | 2021.04.12 |