Jennifer33K 2021-04-20 18:59 采纳率: 66.7%
浏览 393

UE4 class “UObject” 没有成员 “Beginplay”,“Tick”,是什么问题?

// Called when the game starts or when spawned
void ALevelStreamerActor::BeginPlay()
{
    Super::BeginPlay();
    
}

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

}

  • 写回答

1条回答 默认 最新

  • Xiaoxin_03 2024-07-15 10:52
    关注

    在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) 函数。

    评论

报告相同问题?