UObject에서는 게임 엔진에서 주기적으로 호출되는 함수인 Tick함수가 구현되어 있지 않습니다.(Actor나 Component 클래스에서 구현되어있습니다.)
프로젝트를 진행하면서 캐릭터의 스킬 클래스를 UObject에 상속하여 구현했더니 Tick함수가 필요한 상황이 발생했습니다.
UObject에서 Tick함수를 사용한는 법은 다음과 같습니다.
// Test.h
#include "Tickable.h"
class PROJECTTest_API UTest : public UObject, public FTickableGameObject
{
GENERATED_BODY()
public:
UTest();
public:
/** 사용할 Tick함수 입니다. */
virtual void Tick(float DeltaTime) override;
/** Tick을 활성화할지 여부를 반환하는 함수입니다. */
virtual bool IsTickable() const override;
/** 에디터에서 Tick을 활성화할지 여부를 반환하는 함수입니다. 일반적으로 true를 반환하여 에디터에서도 객체의 Tick을 활성화할 수 있도록 설정합니다. */
virtual bool IsTickableInEditor() const override;
/** 게임이 일시 정지되었을 때 Tick을 계속해서 호출할지 여부를 반환하는 함수입니다. */
virtual bool IsTickableWhenPaused() const override;
/** 객체의 고유한 통계 식별자를 반환하는 함수입니다. */
virtual TStatId GetStatId() const override;
/** 객체가 존재하는 World를 반환하는 함수입니다. */
virtual UWorld* GetWorld() const override;
protected:
/** Tick 함수의 활성화/비활성화를 설정하는 변수입니다. */
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "BaseSkill")
bool bTickable;
/** 게임이 일시 정지되었을 때 Tick 함수를 호출할지 나타내는 변수입니다. */
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "BaseSkill")
bool bTickableWhenPaused;
}
// Test.cpp
UTest::UTest()
{
bTickable = false;
bTickableWhenPaused = false;
}
void UTest::Tick(float DeltaTime)
{
}
bool UTest::IsTickable() const
{
return bTickable;
}
bool UTest::IsTickableInEditor() const
{
return bTickable;
}
bool UTest::IsTickableWhenPaused() const
{
return bTickableWhenPaused;
}
TStatId UTest::GetStatId() const
{
return TStatId();
}
UWorld* UTest::GetWorld() const
{
return GetOuter()->GetWorld();
}
'Unreal Engine > C++' 카테고리의 다른 글
[Unreal Engine C++] Widget Animation Delegate (1) | 2024.01.09 |
---|---|
[Unreal Engine 4 C++] TimeStop (시공단열/초산 회피) (0) | 2023.08.02 |
[Unreal Engine 4 C++] C++에서 참조 인자를 가진 함수를 블루프린트에서 호출할 때 출력이 아닌 입력으로 참조 인자 사용하기 (0) | 2023.01.10 |
[Unreal Engine 4 C++] UENUM을 USTRUCT에서 변수로 사용하기 (0) | 2022.12.31 |
[Unreal Engine 4 C++] SetTimer를 활용한 Delay구현 (0) | 2022.12.08 |