CARLA
 
载入中...
搜索中...
未找到
AIControllerFactory.cpp
浏览该文件的文档.
1// Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7//定义了一个 AAIControllerFactory 类,
8//它负责生成 AI 控制器 Actor。GetDefinitions 函数返回一个包含 AI 控制器定义的数组,
9//而 SpawnActor 函数则负责根据给定的变换和描述信息在游戏世界中生成这个 Actor。
10//如果生成过程中出现任何错误,例如世界对象为空或 Actor 生成失败,代码会输出错误日志。
11
12
13#include "Carla.h"
15
18
19TArray<FActorDefinition> AAIControllerFactory::GetDefinitions()
20{
21 // 使用 UActorBlueprintFunctionLibrary 类,并为其创建别名 ABFL 以简化代码。
23 // 使用 ABFL 类的 MakeGenericDefinition 静态函数创建一个通用的 Actor 定义。
24 auto WalkerController = ABFL::MakeGenericDefinition(
25 // 定义的名称。
26 TEXT("controller"),
27 // 定义的类别。
28 TEXT("ai"),
29 // 定义的子类别。
30 TEXT("walker"));
31 // 设置 WalkerController 的 Class 成员,指向 AWalkerAIController 类的类对象。
32 WalkerController.Class = AWalkerAIController::StaticClass();
33 // 返回包含 WalkerController 的数组。
34 return { WalkerController };
35}
36// 传入的参数,包含 Actor 的变换信息(位置、旋转和缩放)。
38 const FTransform &Transform,
39 // 传入的参数,包含 Actor 的描述信息。
40 const FActorDescription &Description)
41{
42 // 获取当前世界(Unreal Engine 中的世界对象)。
43 auto *World = GetWorld();
44 // 如果世界对象为空,则输出错误日志。
45 if (World == nullptr)
46 {
47 // 设置碰撞处理方式为总是生成 Actor,忽略碰撞。
48 UE_LOG(LogCarla, Error, TEXT("AAIControllerFactory: cannot spawn controller into an empty world."));
49 // 返回一个空的 FActorSpawnResult 对象。
50 return {};
51 }
52
53 // 创建 FActorSpawnParameters 对象,用于设置 Actor 生成时的参数。
54 FActorSpawnParameters SpawnParameters;
55 // 设置碰撞处理方式为总是生成 Actor,忽略碰撞。
56 SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
57 // 使用 World 对象的 SpawnActor 函数生成一个新的 Actor,传入 Actor 类型、变换和生成参数。
58 auto *Controller = World->SpawnActor<AActor>(Description.Class, Transform, SpawnParameters);
59 // 如果生成的 Controller 为空,则输出错误日志。
60 if (Controller == nullptr)
61 {
62 UE_LOG(LogCarla, Error, TEXT("AAIControllerFactory: spawn controller failed."));
63 }
64 // 返回包含生成的 Controller 的 FActorSpawnResult 对象。
65 return FActorSpawnResult{Controller};
66
67}
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld * World
FActorSpawnResult SpawnActor(const FTransform &SpawnAtTransform, const FActorDescription &ActorDescription) final
TArray< FActorDefinition > GetDefinitions() final