UE5 C++ 定时器 官方案例练习

一.这里参照 官方案例

Quick Start Guide to Variables Timers and Events in Unreal Engine CPP | 虚幻引擎 5.6 文档 | Epic Developer Community

二.

UPrimitiveComponent 是涉及渲染的组件,三角面的渲染几何等等。渲染线程它不能用U开头的东西,它会在这里把数据转换为F开头的结构体,把数据传递给渲染现场。

* PrimitiveComponents are SceneComponents that contain or generate some sort of geometry, generally to be rendered or used as collision data.。

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CountdownActor.generated.h"

UCLASS()
class THIRDLEARN_API ACountdownActor : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ACountdownActor();
	class UTextRenderComponent* CountdownText;
protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	void UpdateTimeDisplay();
	void AdvanceTimer();
	void CountdownHasFinished();

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;
protected:
	int32 CountdonwTime = 3;
	FTimerHandle CountTimer;
	
};

UpdateTimeDisplay()更新,在BeginPlay一开始的时候就更新一次,并设置好定时器。

定时器,AdvanceTimer 减少计时,更新显示的位置。并判断是否要消除计时器,再最后清楚的时候,更新文本。

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.


#include "CountdownActor.h"
#include "Components/TextRenderComponent.h"

// Sets default values
ACountdownActor::ACountdownActor()
{
	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = false;
	CountdownText = CreateDefaultSubobject<UTextRenderComponent>("CountdownTime");
	CountdownText->SetHorizontalAlignment(EHTA_Center);
	CountdownText->SetWorldSize(150);
	RootComponent = CountdownText;
	CountdonwTime = 3;
}

// Called when the game starts or when spawned
void ACountdownActor::BeginPlay()
{
	Super::BeginPlay();
	UpdateTimeDisplay();
	GetWorldTimerManager().SetTimer(CountTimer, this, &ACountdownActor::AdvanceTimer, 1.0f, true);
}

// Called every frame
void ACountdownActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

void ACountdownActor::UpdateTimeDisplay()
{
	CountdownText->SetText(FText::FromString(FString::FromInt(FMath::Max(CountdonwTime, 0))));
}

void ACountdownActor::AdvanceTimer()
{
	--CountdonwTime;
	UpdateTimeDisplay();
	if (CountdonwTime < 0)
	{
		GetWorldTimerManager().ClearTimer(CountTimer);
		CountdownHasFinished();
	}
}

void ACountdownActor::CountdownHasFinished()
{
	CountdownText->SetText(FText::FromString(TEXT("GO")));
}


// Called every frame
void ACountdownActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

void ACountdownActor::UpdateTimeDisplay()
{
	CountdownText->SetText(FText::FromString(FString::FromInt(FMath::Max(CountdonwTime,0))));
}

void ACountdownActor::AdvanceTimer()
{ 
	--CountdonwTime;
}

void ACountdownActor::CountdownHasFinished()
{
	CountdownText->SetText(FText::FromString(TEXT("GO")));
}
相关推荐
AI视觉网奇2 天前
ue metahuman自动绑定实战
笔记·学习·ue5
AI视觉网奇3 天前
ue 安装报错MD-DL ue 安装笔记
笔记·学习·ue5
zhangzhangkeji3 天前
UE5 多线程(6):FQueuedThreadPool 的使用,peek 函数,
ue5
AI视觉网奇3 天前
ue 导出 fbx
笔记·学习·ue5
zhangzhangkeji3 天前
UE5 多线程(5-3):锁的智能指针版本 FScopeLock 与 FScopeUnlock。
ue5
菜鸟z级4 天前
ubuntu18.04+realsense d415+ur5手眼标定,眼在手上
ue5·机器人·相机
AI视觉网奇4 天前
ue5 绑定 鞋子 blender绑定
笔记·学习·ue5
哎呦哥哥和巨炮叔叔4 天前
虚幻引擎 5.5 能否取代 V-Ray?现代建筑可视化渲染技术对比解析
ue5·实时渲染·虚幻引擎5·建筑可视化·渲染101云渲染·v-ray渲染·建筑效果图
zhangzhangkeji5 天前
UE5 多线程(4):资源竞争与原子变量。UE 建议使用 STL版本的原子量,不用自己版本的原子量 TAtomic<T> 的实现了
ue5
AI视觉网奇5 天前
ue slot 插槽用法笔记
笔记·学习·ue5