UE4 C++ 类的对象的获取

获取类的对象的方法就是通过某种方式传递到这个对象的引用或者指针
好了话不多说
上代码
第一种

for(TActorIterator<Acoloractor>Iterator(GetWorld());Iterator;++Iterator)
    {
        Iterator->Message("succeed");

    }

这里的Acoloractor是我项目的一个character类 Message是该类我自定义的一个方法。
通过
Iterator-> 可以调用找到的对象里的数据。

第二种

 TArray<AActor*> ArryActors;  
    UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::GetClass(), ArryActors);  
    for (int32 i = 0; i < ArryActors.Num(); i++)  
    {  
        Cast<Acoloractor>(ArryActors[i])->Message("succeed"));  

    }  

这都是获取所有对象如果你想获取某个的话再用getname()判断或者 用GetAllActorsWithTag()吧
具体怎么使用这里就不详细解释了

首先,你需要创建一个继承自`USaveGame`的保存游戏数据的,并在其定义需要保存的数据成员。接下来,你需要在异步加载关卡时加载这些数据。 以下是一个简单的示例: ```c++ // MySaveGame.h #pragma once #include "CoreMinimal.h" #include "GameFramework/SaveGame.h" #include "MySaveGame.generated.h" UCLASS() class UMySaveGame : public USaveGame { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite) FString LevelName; }; // MyLevelLoader.h #pragma once #include "CoreMinimal.h" #include "Engine/LevelStreamingDynamic.h" #include "MySaveGame.h" #include "MyLevelLoader.generated.h" UCLASS() class AMyLevelLoader : public AActor { GENERATED_BODY() public: AMyLevelLoader(); UFUNCTION(BlueprintCallable) void LoadLevelAsync(const FString& LevelName); void LoadLevelAsync_Internal(const FString& LevelName); UFUNCTION() void OnLevelLoaded(); private: UPROPERTY() ULevelStreamingDynamic* StreamingLevel; UPROPERTY() UMySaveGame* SaveGame; }; // MyLevelLoader.cpp #include "MyLevelLoader.h" #include "Kismet/GameplayStatics.h" #include "Engine/World.h" AMyLevelLoader::AMyLevelLoader() { PrimaryActorTick.bCanEverTick = false; StreamingLevel = NewObject<ULevelStreamingDynamic>(this, ULevelStreamingDynamic::StaticClass()); StreamingLevel->bShouldBeLoaded = false; StreamingLevel->bShouldBeVisible = false; } void AMyLevelLoader::LoadLevelAsync(const FString& LevelName) { SaveGame = Cast<UMySaveGame>(UGameplayStatics::CreateSaveGameObject(UMySaveGame::StaticClass())); if (SaveGame != nullptr) { SaveGame->LevelName = LevelName; SaveGame->SaveAsync(0); } FStreamableManager& Streamable = UAssetManager::GetStreamableManager(); Streamable.RequestLevel(StreamingLevel->GetWorldAssetPackageFName(LevelName), FStreamableDelegate::CreateUObject(this, &AMyLevelLoader::LoadLevelAsync_Internal, LevelName)); } void AMyLevelLoader::LoadLevelAsync_Internal(const FString& LevelName) { StreamingLevel->SetWorldAssetByPackageName(LevelName); StreamingLevel->bShouldBeLoaded = true; UWorld* World = GetWorld(); if (World != nullptr) { StreamingLevel->LevelColor = FColor::MakeRandomColor(); StreamingLevel->LevelTransform = FTransform(FRotator::ZeroRotator, FVector(0.f, 0.f, 0.f), FVector(1.f, 1.f, 1.f)); World->AddLevelStreamingActor(StreamingLevel, GetActorTransform()); } } void AMyLevelLoader::OnLevelLoaded() { if (SaveGame != nullptr) { FString LevelName = SaveGame->LevelName; SaveGame->Delete(); SaveGame = nullptr; // Do something with the loaded level... } } ``` 在上面的示例,`UMySaveGame`保存了需要在异步加载关卡时加载的数据成员。`AMyLevelLoader`是一个继承自`AActor`的,它有一个`LoadLevelAsync`函数,它会异步加载指定名称的关卡,并在加载完成后调用`OnLevelLoaded`函数。在`LoadLevelAsync_Internal`函数,我们使用`ULevelStreamingDynamic`来加载关卡,并在加载完成后将其添加到世界。在`OnLevelLoaded`函数,我们可以获取保存在`UMySaveGame`对象的数据成员,并进行后续操作。 请注意,以上示例仅用于演示目的,实际使用时可能需要进行更多的错误处理和数据验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值