SpawnActor 方法
创建一个新的 Actor 示例的过程称为 生成 。生成 Actors 的过程是使用 UWorld::SpawnActor()
函数完成的。该函数创建指定类的一个新实例 并返回到那个新创建的 Actor 的指针。UWorld::SpawnActor()
仅用于创建在继承于 Actor
的类的实例。
AActor* UWorld::SpawnActor
(
UClass* Class,
FName InName,
FVector const* Location,
FRotator const* Rotation,
AActor* Template,
bool bNoCollisionFail,
bool bRemoteOwned,
AActor* Owner,
APawn* Instigator,
bool bNoFail,
ULevel* OverrideLevel,
bool bDeferConstruction
)
参数 |
描述 |
|
---|---|---|
|
一个 |
|
|
可选的。 |
|
|
可选的。一个 |
|
|
可选的。一个 ``FVector`` ,提供了生成的 Actor 的初始旋转度。 |
|
|
可选的。一个 |
|
|
可选的。一个 |
|
|
可选的。 |
|
|
可选的。拥有所生成的 Actor 的 |
|
|
可选的。 |
|
|
可选的。一个布尔值,决定了如果某些条件不满足,生成Actor是否失败。如果为 |
|
|
可选的。在其中生成 Actor 的 |
|
|
可选的。一个布尔值,决定是否运行构建脚本。如果为 |
|
返回值
|
||
生成的 Actor 是以 |
用法
AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()->SpawnActor(AKAsset::StaticClass(), NAME_None, &Location);
生成函数的模板
为了使得生成 Actors 的过程更加方便,我们提供了几个常用的函数模板。这些函数使得创建 Actor 变得更加简单,因为它们仅需要 少量的参数,并允许指定返回的 Actor 的类型。
生成T实例, 返回T指针
这个函数模板在相同的位置处、以相同的旋转度生成该模板类 T
的实例,作为执行生成操作的 Actor 的根组件,并返回 到和那个模板类一样类型的实例的指针,也就是 T*
。您可以指定拥有者 Actor 、挑衅的 Pawn ,及指定如果生成的 Actor 会侵占或碰撞 另一个世界中已经存在的 Actor 生成操作是否失败。
/** Spawns and returns class T, respects default rotation and translation of root component. */
template< class T >
T* SpawnActor
(
AActor* Owner=NULL,
APawn* Instigator=NULL,
bool bNoCollisionFail=false
)
{
return (T*)(GetWorld()->SpawnActor(T::StaticClass(), NAME_None, NULL, NULL, NULL, bNoCollisionFail, false, Owner, Instigator));
}
用法
MyHUD = SpawnActor<AHUD>(this, Instigator);
使用变换生成T实例,返回T指针
该函数模板在指定 位置
处使用指定的 旋转度`生成模板类
T 的实例,并返回和那个模板类类型一样的实例的指针, 也就是
T*` 。除了位置和旋转度外,还可以指定拥有者 Actor 、挑衅的 Pawn ,及指定如果生成的 Actor 会侵占或碰撞 另一个世界中已经存在的 Actor 生成操作是否失败。
/** Spawns and returns class T, forcibly sets world position. */
template< class T >
T* SpawnActor
(
FVector const& Location,
FRotator const& Rotation,
AActor* Owner=NULL,
APawn* Instigator=NULL,
bool bNoCollisionFail=false
)
{
return (T*)(GetWorld()->SpawnActor(T::StaticClass(), NAME_None, &Location, &Rotation, NULL, bNoCollisionFail, false, Owner, Instigator));
}
用法
Controller = SpawnActor<AController>(GetLocation(), GetRotation(), NULL, Instigator, true);
生成类实例, 返回T 指针
这个函数模板在相同的位置处、以相同的旋转度生成指定 Class(类)
的实例,作为执行生成操作的 Actor 的根组件,并返回 到和那个模板类一样类型的实例的指针,也就是 T*
。这要求指定的 Class(类)
必须是模板类 T
的子类。除了类外,您还可以指定 拥有者 Actor 、挑衅的 Pawn ,及指定如果生成的 Actor 会侵占或碰撞另一个世界中已经存在的 Actor 生成操作 是否失败。
/** Spawns given class and returns class T pointer, respects default rotation and translation of root component. */
template< class T >
T* SpawnActor
(
UClass* Class,
AActor* Owner=NULL,
APawn* Instigator=NULL,
bool bNoCollisionFail=false
)
{
return (Class != NULL) ? Cast<T>(GetWorld()->SpawnActor(Class, NAME_None, NULL, NULL, NULL, bNoCollisionFail, false, Owner, Instigator)) : NULL;
}
用法
MyHUD = SpawnActor<AHUD>(NewHUDClass, this, Instigator);
使用变换生成类实例,返回T指针
该函数模板在指定 位置
处使用指定的 旋转度`生成指定类
类 的实例,并返回和那个模板类类型一样的实例的指针, 也就是
T*` 。这要求指定的 `Class(类)` 必须是模板类 `T` 的子类。除了类、位置及旋转度外,还可以指定拥有者 Actor 、挑衅的的 Pawn , 及指定如果生成的 Actor 会侵占或碰撞另一个世界中已经存在的 Actor 生成操作
/** Spawns given class and returns class T pointer, forcibly sets world position. */
template< class T >
T* SpawnActor
(
UClass* Class,
FVector const& Location,
FRotator const& Rotation,
AActor* Owner=NULL,
APawn* Instigator=NULL,
bool bNoCollisionFail=false
)
{
return (Class != NULL) ? Cast<T>(GetWorld()->SpawnActor(Class, NAME_None, &Location, &Rotation, NULL, bNoCollisionFail, false, Owner, Instigator)) : NULL;
}
用法
APawn* ResultPawn = SpawnActor<APawn>(DefaultPawnClass, StartLocation, StartRotation, NULL, Instigator);