// Called when the game starts or when spawned
void ALevelStreamerActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void ALevelStreamerActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// Called when the game starts or when spawned
void ALevelStreamerActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void ALevelStreamerActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
在Unreal Engine 4 (UE4) 中,UObject 类是引擎中所有对象的基类,但它并不直接包含 BeginPlay() 或 Tick(float DeltaTime) 这两个成员函数。这两个函数是 AActor 类(或继承自 AActor 的类)的成员函数,而不是 UObject 类的。
问题分析
你遇到的问题很可能是因为你的类 ALevelStreamerActor 没有正确继承自 AActor 或其子类。在UE4中,如果你想在对象被加载到游戏世界时执行某些初始化代码(如 BeginPlay()),或者在每帧更新时执行某些代码(如 Tick(float DeltaTime)),你的类应该继承自 AActor。
解决方案
确保 ALevelStreamerActor 继承自 AActor。这里是一个基本的类定义示例:
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LevelStreamerActor.generated.h"
UCLASS()
class YOURPROJECTNAME_API ALevelStreamerActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ALevelStreamerActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};
// In LevelStreamerActor.cpp
#include "LevelStreamerActor.h"
ALevelStreamerActor::ALevelStreamerActor()
{
// 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;
}
void ALevelStreamerActor::BeginPlay()
{
Super::BeginPlay();
// Your initialization code here
}
void ALevelStreamerActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// Your tick code here
}
注意事项
继承关系:确保你的类是从 AActor 或其子类继承而来。
Tick函数:如果你想让 Tick 函数被调用,你需要在类的构造函数中设置 PrimaryActorTick.bCanEverTick = true;。
Override关键字:在C++中,使用 override 关键字可以帮助你确保你正在正确地重写基类中的虚函数。如果基类中没有该函数,编译器会报错,这有助于避免拼写错误或函数签名不匹配的问题。
通过以上步骤,你应该能够解决你的问题,并在 ALevelStreamerActor 类中正确使用 BeginPlay() 和 Tick(float DeltaTime) 函数。