UE4 全局单例类实例

.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;
}

 

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页