UObject的Tick
UE4中原生的UObject并不支持Tick函数,得继承FTickableGameObject才可以,代码示例如下:
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Tickable.h"
#include "TickObject.generated.h"
/**
*
*/
UCLASS()
class MYPROJECT6_API UTickObject : public UObject, public FTickableGameObject
{
GENERATED_BODY()
public:
UTickObject();
~UTickObject();
public:
virtual void Tick(float DeltaTime) override;
virtual bool IsTickable() const override;
virtual TStatId GetStatId() const override;
};
#include "TickObject.h"
UTickObject::UTickObject()
{
}
UTickObject::~UTickObject()
{
}
void UTickObject::Tick(float DeltaTime)
{
}
bool UTickObject::IsTickable() const
{
return true;
}
TStatId UTickObject::GetStatId() const
{
return Super::GetStatID();
}
得非常注意
[1]. 重载GetStatId函数的时候得返回UObject的GetStatID,而不能直接返回0,否则会报错。
[2]. IsTickable函数得返回true
UActorComponent的TickComponent
在构造函数设置 PrimaryComponentTick.bCanEverTick 为 true
UTickActorComponent::UTickActorComponent()
{
// Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
// off to improve performance if you don't need them.
PrimaryComponentTick.bCanEverTick = true;
// ...
}
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
void UTickActorComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
// ...
}
AActor的Tick
构造函数设置PrimaryActorTick.bCanEverTick 为 true
ATickActor::ATickActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
virtual void Tick(float DeltaTime) override;
void ATickActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}