查看: 332|回复: 11

[编程指南] 【生成 Actors | Unreal Engine】

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
73034
发表于 2016-6-27 01:05:04 | 显示全部楼层 |阅读模式


本页面的内容:

      
SpawnActor 方法
用法

生成函数的模板
生成T实例, 返回T指针
使用变换生成T实例,返回T指针
生成类实例, 返回T 指针
使用变换生成类实例,返回T指针
     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)

参数
描述

Class一个 UClass ,指出了要生成的 Actor 的类。InName可选的。FName ,用作为新生成的 Actor 的 资源文件名称 。如果没有指定值,那么则将使用 [Class]_[Number] 的形式自动生成所产生的 Actor 的资源文件名称。Location可选的。一个 FVector ,提供了生成的 Actor 的初始位置。Rotation可选的。一个 FVector ,提供了生成的 Actor 的初始旋转度。Template可选的。一个 AActor ,用作为生成新 Actor 时使用的模板。所生成的 Actor 将使用模板 Actor 的属性值进行初始化。如果没有指定模板 Actor ,那么将使用类默认对象(CDO)来初始化所生成的 Actor 。bNoCollisionFail可选的。一个  bool 值,决定生成  Actor 时是否执行碰撞测试。如果为 true ,那么无论根组件或模板 Actor 的碰撞设置为什么,在生成 Actor 时都不执行碰撞测试。bRemoteOwned可选的。布尔值 。Owner可选的。拥有所生成的 Actor 的 AActor 。Instigator可选的。APawn ,导致所生成的 Actor 施加伤害的挑衅者。bNoFail可选的。一个布尔值,决定了如果某些条件不满足,生成Actor是否失败。如果为 true ,那么生成过程将会失败,因为所生成的类是 bStatic=true ,或者因为模板 Actor 和正在生成的 Actor 的类不一样。OverrideLevel可选的。在其中生成 Actor 的 ULevel ,也就是 Actor 的外部容器。如果没有指定关卡,那么则使用使用 Owner 的 Outer(外部容器) 。如果没有指定  Owner ,则使用永久性关卡。bDeferConstruction可选的。一个布尔值,决定是否运行构建脚本。如果为 true ,那么将不会在生成的 Actor 上运行构建脚本。仅当正在从 蓝图 中生成 Actor 时适用。
返回值
生成的 Actor 是以 AActor 指针的形式呈现。返回值必须类型转换为 Class 参数指定的衍生类型。
用法
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 = SpawnActorAHUD(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 = SpawnActorAController(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)  CastT(GetWorld()-SpawnActor(Class, NAME_None, NULL, NULL, NULL, bNoCollisionFail, false, Owner, Instigator)) : NULL;}
用法
MyHUD = SpawnActorAHUD(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)  CastT(GetWorld()-SpawnActor(Class, NAME_None, Location, Rotation, NULL, bNoCollisionFail, false, Owner, Instigator)) : NULL;}
用法
APawn* ResultPawn = SpawnActorAPawn(DefaultPawnClass, StartLocation, StartRotation, NULL, Instigator);
回复

使用道具 举报

0

主题

836

帖子

2754

积分

vip会员

Rank: 1

积分
2754
发表于 2016-7-2 19:37:38 来自手机 | 显示全部楼层
这个是什么呢,看看看
回复 支持 反对

使用道具 举报

0

主题

909

帖子

3014

积分

vip会员

Rank: 1

积分
3014
发表于 2016-7-4 00:08:43 来自手机 | 显示全部楼层
很想看看看了
回复 支持 反对

使用道具 举报

0

主题

814

帖子

2699

积分

vip会员

Rank: 1

积分
2699
发表于 2016-7-4 11:32:34 来自手机 | 显示全部楼层
版主我爱你
回复 支持 反对

使用道具 举报

0

主题

830

帖子

2775

积分

vip会员

Rank: 1

积分
2775
发表于 2016-7-6 09:49:58 来自手机 | 显示全部楼层
全就行啊,,支持 一下
回复 支持 反对

使用道具 举报

0

主题

902

帖子

2956

积分

vip会员

Rank: 1

积分
2956
发表于 2016-7-6 10:47:18 | 显示全部楼层
要查看本帖隐藏内容请回复
回复 支持 反对

使用道具 举报

0

主题

967

帖子

3159

积分

vip会员

Rank: 1

积分
3159
发表于 2016-7-11 10:41:34 | 显示全部楼层
加油摸摸大,感谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

880

帖子

2898

积分

vip会员

Rank: 1

积分
2898
发表于 2016-7-12 02:54:53 | 显示全部楼层
看看价格支持下
回复 支持 反对

使用道具 举报

0

主题

864

帖子

2844

积分

vip会员

Rank: 1

积分
2844
发表于 2016-7-13 18:25:31 来自手机 | 显示全部楼层
论坛的好东西真多啊,相信版主放的东西都靠谱,就是希望价格便宜点啦。
回复 支持 反对

使用道具 举报

0

主题

873

帖子

2906

积分

vip会员

Rank: 1

积分
2906
发表于 2016-7-15 20:09:12 来自手机 | 显示全部楼层
好东西都要支持, 谢谢了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部