UE申请EngineTick及GameTick简介

如何申请EngineTick及GameTick简介

UE中申请Tick的方法有四种(目前笔者知道的。。。)

EngineTick

1.FTSTicker(原名FTicker,已废弃)
FTSTicker的特点是其Tick的生命周期同Engine一样长。
申请方式:

class UManagerSubsystem : public UEngineSubsystem,public FTSTicker
{
public:
	UManagerSubsystem();
	~UManagerSubsystem();
private:
	FTSTicker::FDelegateHandle TickHandler;
}

UManagerSubsystem.cpp
void UManagerSubsystem()
{
    // 注册定时任务回调函数
    if (!TickHandler.IsValid()) {
	TickHandler = FTSTicker::GetCoreTicker().AddTicker(FTickerDelegate::CreateUObject(this,&UBTHFSMManagerSubsystem::MyTickFunction));
	}
}

void ~UManagerSubsystem()
{
	FTSTicker::GetCoreTicker().RemoveTicker(TickHandler);
}

UBTHFSMManagerSubsystem.h
bool MyTickFunction(float DeltaTime)

UBTHFSMManagerSubsystem.cpp
// 自定义的定时任务回调函数
bool MyTickFunction(float DeltaTime)
{
    // 在这里执行你的定时任务
    UE_LOG(LogTemp, Warning, TEXT("MyTickFunction executed!"));
    // 返回 true 表示继续执行该任务,返回 false 表示不再执行该任务,并且会从队列中移除!
    return true;
}



注意:如果在Tick的函数内容中返回False,则该定时任务就会从队列中移除,所以一定要小心。

GameTick

这里笔者比较懒,就先贴上个人常用的,耦合最少的方法。使用方法类似上文
1.ActorTick(待补充)
2.TimeManager(待补充)
3.FTickableGameObject

class UManagerSubsystem : public UEngineSubsystem,public FTickableGameObject
{
public:
	virtrual void Tick(float DeltaTime) override;
	virtrual TStatId GetStatId() const override;
private:
	FTSTicker::FDelegateHandle TickHandler;
}

void UManagerSubsystem::Tick(float DeltaTime)
{
//此处执行你的任务内容
	UE_LOG(LogTemp, Warning, TEXT("MyTickFunction executed!"));
}
TStatId UManagerSubsystem::GetStatId() const
{
	RETURN_QUICK_DECLARE_CYCLE_STAT(UManagerSubsystem, STATGROUP_Tickables); 
}

相关参考
Tick剖析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值