CARLA
载入中...
搜索中...
未找到
Unreal
CarlaUE4
Plugins
Carla
Source
Carla
AI
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
"
14
#include "
Carla/AI/AIControllerFactory.h
"
15
16
#include "
Carla/AI/WalkerAIController.h
"
17
#include "
Carla/Actor/ActorBlueprintFunctionLibrary.h
"
18
19
TArray<FActorDefinition>
AAIControllerFactory::GetDefinitions
()
20
{
21
// 使用 UActorBlueprintFunctionLibrary 类,并为其创建别名 ABFL 以简化代码。
22
using
ABFL =
UActorBlueprintFunctionLibrary
;
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 的变换信息(位置、旋转和缩放)。
37
FActorSpawnResult
AAIControllerFactory::SpawnActor
(
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
}
AIControllerFactory.h
ActorBlueprintFunctionLibrary.h
UE_LOG
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)
World
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld * World
Definition
CarlaActor.cpp:83
Carla.h
WalkerAIController.h
AAIControllerFactory::SpawnActor
FActorSpawnResult SpawnActor(const FTransform &SpawnAtTransform, const FActorDescription &ActorDescription) final
Definition
AIControllerFactory.cpp:37
AAIControllerFactory::GetDefinitions
TArray< FActorDefinition > GetDefinitions() final
Definition
AIControllerFactory.cpp:19
AActor
UActorBlueprintFunctionLibrary
Definition
ActorBlueprintFunctionLibrary.h:32
FActorDescription
carla参与者及其所有变体的描述
Definition
Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Actor/ActorDescription.h:16
FActorDescription::Class
TSubclassOf< AActor > Class
要生成的参与者类
Definition
Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Actor/ActorDescription.h:28
FActorSpawnResult
Definition
ActorSpawnResult.h:34
制作者
1.10.0