查看: 190|回复: 6

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

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
73034
发表于 2016-6-26 02:01:57 | 显示全部楼层 |阅读模式


本页面的内容:

      
SpawnActor 方法
用法

生成函数的模板
生成T实例, 返回T指针
使用变换生成T实例,返回T指针
生成类实例, 返回T 指针
使用变换生成类实例,返回T指针
     SpawnActor 方法
创建一个新的 Actor 示例的过程称为 生成 。生成 Actors 的过程是使用 UWorld::SpawnActor()</code>  函数完成的。该函数创建指定类的一个新实例 并返回到那个新创建的 Actor 的指针。UWorld::SpawnActor()</code>  仅用于创建在继承于 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</code>一个 UClass</code> ,指出了要生成的 Actor 的类。InName</code>可选的。FName</code> ,用作为新生成的 Actor 的 资源文件名称</code> 。如果没有指定值,那么则将使用 [Class]_[Number] 的形式自动生成所产生的 Actor 的资源文件名称。Location</code>可选的。一个 FVector</code> ,提供了生成的 Actor 的初始位置。Rotation</code>可选的。一个 FVector</code> ,提供了生成的 Actor 的初始旋转度。Template</code>可选的。一个 AActor</code> ,用作为生成新 Actor 时使用的模板。所生成的 Actor 将使用模板 Actor 的属性值进行初始化。如果没有指定模板 Actor ,那么将使用类默认对象(CDO)来初始化所生成的 Actor 。bNoCollisionFail</code>可选的。一个  bool</code> 值,决定生成  Actor 时是否执行碰撞测试。如果为 true</code> ,那么无论根组件或模板 Actor 的碰撞设置为什么,在生成 Actor 时都不执行碰撞测试。bRemoteOwned</code>可选的。布尔值</code> 。Owner</code>可选的。拥有所生成的 Actor 的 AActor</code> 。Instigator</code>可选的。APawn</code> ,导致所生成的 Actor 施加伤害的挑衅者。bNoFail</code>可选的。一个布尔值,决定了如果某些条件不满足,生成Actor是否失败。如果为 true</code> ,那么生成过程将会失败,因为所生成的类是 bStatic=true</code> ,或者因为模板 Actor 和正在生成的 Actor 的类不一样。OverrideLevel</code>可选的。在其中生成 Actor 的 ULevel</code> ,也就是 Actor 的外部容器。如果没有指定关卡,那么则使用使用 Owner</code> 的 Outer(外部容器)</code> 。如果没有指定  Owner</code> ,则使用永久性关卡。bDeferConstruction</code>可选的。一个布尔值,决定是否运行构建脚本。如果为 true</code> ,那么将不会在生成的 Actor 上运行构建脚本。仅当正在从 蓝图 中生成 Actor 时适用。
返回值
生成的 Actor 是以 AActor</code> 指针的形式呈现。返回值必须类型转换为 Class</code> 参数指定的衍生类型。
用法AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()-SpawnActor(AKAsset::StaticClass(), NAME_None, Location);生成函数的模板
为了使得生成 Actors 的过程更加方便,我们提供了几个常用的函数模板。这些函数使得创建 Actor 变得更加简单,因为它们仅需要 少量的参数,并允许指定返回的 Actor 的类型。

生成T实例, 返回T指针
这个函数模板在相同的位置处、以相同的旋转度生成该模板类 T</code> 的实例,作为执行生成操作的 Actor 的根组件,并返回 到和那个模板类一样类型的实例的指针,也就是 T*</code> 。您可以指定拥有者 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指针
该函数模板在指定 位置</code> 处使用指定的 旋转度</code>生成模板类  T</code> 的实例,并返回和那个模板类类型一样的实例的指针, 也就是  T*</code> 。除了位置和旋转度外,还可以指定拥有者 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(类)</code> 的实例,作为执行生成操作的 Actor 的根组件,并返回 到和那个模板类一样类型的实例的指针,也就是 T*</code> 。这要求指定的 Class(类)</code> 必须是模板类  T</code> 的子类。除了类外,您还可以指定 拥有者 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指针
该函数模板在指定 位置</code> 处使用指定的 旋转度</code>生成指定类  类</code> 的实例,并返回和那个模板类类型一样的实例的指针, 也就是  T*</code> 。这要求指定的 Class(类)</code> 必须是模板类  T</code> 的子类。除了类、位置及旋转度外,还可以指定拥有者 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

主题

875

帖子

2873

积分

vip会员

Rank: 1

积分
2873
发表于 2016-7-2 19:23:54 来自手机 | 显示全部楼层
下来看看,多谢楼主分享了。
回复 支持 反对

使用道具 举报

0

主题

836

帖子

2773

积分

vip会员

Rank: 1

积分
2773
发表于 2016-7-3 23:11:39 来自手机 | 显示全部楼层
楼主造福人类了谢谢
回复 支持 反对

使用道具 举报

0

主题

883

帖子

2909

积分

vip会员

Rank: 1

积分
2909
发表于 2016-7-4 11:28:39 | 显示全部楼层
论坛的好东西真多啊,相信版主放的东西都靠谱,就是希望价格便宜点啦。
回复 支持 反对

使用道具 举报

0

主题

900

帖子

2982

积分

vip会员

Rank: 1

积分
2982
发表于 2016-7-7 11:16:06 来自手机 | 显示全部楼层
最喜欢全套的了
回复 支持 反对

使用道具 举报

0

主题

873

帖子

2914

积分

vip会员

Rank: 1

积分
2914
发表于 2016-7-17 20:37:33 | 显示全部楼层
哈哈哈好大呀
回复 支持 反对

使用道具 举报

0

主题

884

帖子

2938

积分

vip会员

Rank: 1

积分
2938
发表于 2016-7-18 09:34:38 来自手机 | 显示全部楼层
这个需要的j8也不少吧
回复 支持 反对

使用道具 举报

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

本版积分规则

 
 



邮件留言:


 
返回顶部