.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Tickable.h"
#include "SingletonObject.generated.h"
/**
*
*/
UCLASS(Blueprintable, BlueprintType)
class A418_API USingletonObject : public UObject, public FTickableGameObject
{
GENERATED_BODY()
public:
USingletonObject(const FObjectInitializer& ObjectInitializer);
/** Begin FTickableObjectBase Interface */
virtual void Tick(float DeltaTime) override;
virtual bool IsTickable() const override;
virtual TStatId GetStatId() const override;
/** End FTickableObjectBase Interface */
/** Begin FTickableObject Interface */
virtual bool IsTickableWhenPaused() const override;
virtual bool IsTickableInEditor() const override;
virtual UWorld* GetTickableGameObjectWorld() const override;
/** End FTickableObject Interface */
/** Begin UObject Interface */
virtual class UWorld* GetWorld() const override;
/** End UObject Interface */
UFUNCTION(BlueprintImplementableEvent, meta = (DisplayName = "Tick"))
void ReceiveTick(float DeltaSeconds);
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "SingletonObject.h"
USingletonObject::USingletonObject(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
void USingletonObject::Tick(float DeltaTime)
{
UE_LOG(LogTemp, Log, TEXT("SingletonObject Tick!!"));
ReceiveTick(DeltaTime);
}
bool USingletonObject::IsTickable() const
{
return true;
}
TStatId USingletonObject::GetStatId() const
{
RETURN_QUICK_DECLARE_CYCLE_STAT(USingletonObject, STATGROUP_Tickables);
}
bool USingletonObject::IsTickableWhenPaused() const
{
return false;
}
bool USingletonObject::IsTickableInEditor() const
{
return true;
}
UWorld* USingletonObject::GetTickableGameObjectWorld() const
{
return GetWorld();
}
UWorld* USingletonObject::GetWorld() const
{
UWorld* World = (GetOuter() != nullptr) ? GetOuter()->GetWorld() : GWorld;
if (World == nullptr)
{
World = GWorld;
}
return World;
}