이벤트 함수
게임이 시작될 때, 액터는 준비/시작/지속/퇴장의 과정을 거친다
이 과정에서 언리얼 엔진에 의해 자동으로 호출되는 함수를 이벤트 함수라고 한다
주요 이벤트 함수의 호출 및 순서에 따른 구분은 아래와 같다
- PostInitializeComponents()
액터를 구성하는 모든 컴포넌트가 초기화되었고
액터 자신이 초기화 될 수 있는 상태일 때 호출되는 함수로
준비 과정에 속한다
- BeginPlay()
해당 함수가 호출되면서 액터는 자신에게 주어진 로직을 수행하기 시작하며
시작 과정에 속한다
- Tick(float DeltaSeconds)
BeginPlay() 함수가 한 번 호출되는 함수라면,
Tick() 함수는 매 프레임마다 호출된다
Tick() 함수의 매개변수인 DeltaSeconds는 이전 프레임부터 현재 프레임까지 걸린 시간이다
지속 과정에 속한다
- EndPlay(EEndPlayReason EndPlayReason)
게임에서 액터가 소멸될 때 호출되는 함수로 퇴장 과정에 속한다
Tick() 함수를 활용한 액터의 움직임 구현 실습
// STorch.h
...
class STUDYPROJECT_API ASTorch : public AActor
{
...
public:
...
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
private:
...
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "ASTorch", Meta = (AllowPrivateAccess))
float RotationSpeed;
};
// STorch.cpp
...
ASTorch::ASTorch()
{
PrimaryActorTick.bCanEverTick = true;
...
}
void ASTorch::BeginPlay()
{
Super::BeginPlay();
RotationSpeed = 300.f;
}
void ASTorch::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
AddActorWorldRotation(FRotator(0.f, RotationSpeed * DeltaSeconds, 0.f));
}
MovementComponent를 활용한 액터의 움직임 구현 실습
MovementComponent를 활용하면
bCanEverTick을 false로 해서 Actor의 Tick 함수를 내부에 작성하지 않아도 된다
Actor의 BeginPlay에서 회전하는 규칙 및 방법을 정해서 초기화를 했기 때문에
위의 예제와 같은 상황을 만들어 낼 수 있다
// STorch.h
class URotatingMovementComponent;
...
class STUDYPROJECT_API ASTorch : public AActor
{
...
private:
...
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "ASTorch", meta = (AllowPrivateAccess))
TObjectPtr<URotatingMovementComponent> RotatingMovementComponent;
};
// STorch.cpp
...
#include "GameFramework/RotatingMovementComponent.h"
...
ASTorch::ASTorch()
{
PrimaryActorTick.bCanEverTick = false;
...
RotatingMovementComponent = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingMovementComponent"));
}
void ASTorch::BeginPlay()
{
Super::PostInitializeComponents();
RotationSpeed = 300.f;
RotatingMovementComponent->RotationRate = FRotator(0.f, RotationSpeed, 0.f);
}
void ASTorch::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
//AddActorWorldRotation(FRotator(0.f, RotationSpeed * DeltaSeconds, 0.f));
}
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 게임 플레이 프레임워크 - Game Mode (0) | 2024.05.12 |
---|---|
언리얼 게임 플레이 프레임워크 - 기본 구성 (0) | 2024.05.12 |
언리얼 Actor - 언리얼 에셋 지정 (0) | 2024.05.11 |
언리얼 Actor - UPROPERTY()의 Specifier (0) | 2024.05.11 |
언리얼 Actor - 언리얼 C++ 자료형 (0) | 2024.05.11 |