使用Verse动态生成设备



通过一些非常奇特的技巧,你将学会如何动态生成堡垒之夜装置,并在Verse中使用它们。

截至UEFN 25.20版本,我们只能使用SpawnProp来生成道具,而不能生成设备。不过……如果我们将设备放置在道具中会发生什么呢?没错:它们也会被生成


这项技术很简单但非常隐蔽:制作一个包含设备的子级容器自定义道具,添加一些游戏标签以在Verse中使用生成的设备,然后生成它。


1. 已知限制


  • 无法生成自定义Verse设备(除非它们完全失效),只能生成内置设备。听起来很令人沮丧,但你可以轻松解决:制作一个单一的Verse设备,用数组管理所有生成的设备的“实例”。 

  • 生成的设备无法直接在Verse中查询,必须查询所有生成的设备。这意味着一旦调用SpawnProp,你就无法直接获取你生成的设备。相反,你只能访问所有你生成的设备(具有相同标签)。这有点烦人,但你可以创建一个Verse系统,将每个道具与其设备关联起来(例如使用映射)。

  • 一旦将设备“转换”为道具,就无法编辑设备属性。这非常令人烦恼,唯一的解决办法是重复这个过程,并在每次想要更改设备设置时创建一个新的道具。如果你幸运的话,一些设置可以在Verse中设置,这样你就不需要这样做。 


对于本教程,我们的目标是制作一个系统,生成篝火设备,并定期点燃和熄灭它们。


2. 创建游戏标签


一般来说,游戏标签对于标记场景中的对象很有用。为我们想要生成的设备分配一个游戏标签是必要的,以便在Verse中与生成的设备交互。如果你只需要生成一个设备并移动它,这一步是可选的。


让我们创建一个名为spawned_campfire_tag游戏标签。你也可以查看UEFN文档中的游戏标签页面来完成这个步骤。我们将创建一个单独的Verse文件,其中包含我们所有的游戏标签。当然,你也可以按照自己的方式组织事物。


UEFN文档中的游戏标签页面:

https://dev.epicgames.com/documentation/en-us/uefn/gameplay-tags-in-verse


打开Verse浏览器窗口(位于顶部菜单中:Verse > Verse Explorer),通过右键单击你的项目名称,并使用“添加新的Verse文件到项目”选项创建一个新的Verse文件



另一个窗口将出现,在这里你可以为包含游戏标签的文件选择一个名称。然后,请确保点击“创建空文件”,而不是创建设备。



完成后,双击打开该文件。然后,按照文档的说明填写文件以声明标签。如果需要,你可以更改标签的名称。


声明标签的文档说明:

https://dev.epicgames.com/documentation/en-us/uefn/gameplay-tags-in-verse#creatingagameplaytag



确保在UEFN中构建Verse代码,方法是按下Ctrl+Shift+B,或者通过菜单进入(Verse > Build Verse Code),这样我们就完成了!


3. 创建道具设备


为了生成一个设备,我们需要将它放入一个道具中,并添加我们创建的游戏标签。我们可以使用子级容器选项来完成这个操作。


警告:这种方法不能很好地与Verse设备配合使用,如果你尝试这样做,可能会在地图中留下故障和无法删除的设备!


首先,将设备拖放到你的世界中。根据你的喜好配置其属性,然后单击“添加”按钮,选择“Verse标记标记”组件(在搜索栏中键入“verse”)。



添加完Verse标记标记组件后,单击它。然后,点击“编辑...”按钮,通过勾选旁边的复选框来添加spawned_campfire_tag



我们的设备现在已经准备好转换为道具了!点击“从选择中创建蓝图”按钮,就在“添加”按钮旁边:



接下来,将会出现一个窗口。确保选中了“子级容器选项”,并选择BuildingProp作为父类(在搜索栏中键入“prop”)。然后,您可以选择道具资产的名称和目标文件夹。


会弹出一个窗口,显示新创建的道具。如果您之前没有使用过虚幻引擎,这可能会看起来有些混乱。我来总结一下其中发生的事情:


  • 道具由一个静态网格和用于碰撞的边界框组成。在这里,我们有一个没有静态网格的道具。

  • 我们还有另一个名为“Device_Campfire_C”和一堆数字的神秘组件。尽管默认名称不太好看,但这是一个子级容器组件,它将生成一个设备容器(篝火),并附加到道具上。



您可以尝试使用这种技术,并做更有趣的事情!您可以向道具添加网格;在道具内部移动设备;甚至在单个道具中放置多个设备,只需在单击“从选择中创建蓝图”按钮之前选择多个设备即可。


请记住,移动道具也会移动附加到其中的设备设备不能引用世界对象,您无法编辑设备属性(除了位置、旋转、比例和可见性)。


如果您不再需要,现在可以删除世界中的道具设备了。


4. 生成设备


现在是时候在Verse中生成设备了!在本示例中,我们只想在游戏开始时生成一个篝火


为了生成设备,我们需要获取到道具资产的引用。我们可以使用creative_prop_asset类型的变量来实现这一点。然后,我们只需调用 SpawnProp传入道具资产和变换(平移、旋转、比例)。


我们将创建一个名为campfire_spawner的设备。您可以像往常一样创建一个Verse文件(使用“创建”而不是“创建空文件”),或者只需阅读代码以了解其工作原理。



重新构建Verse代码,并将生成器设备放入世界中。然后,用我们想要生成的道具设备填写道具变量



现在启动游戏,稍等片刻,然后...篝火设备就出现在你面前了!太棒了,这就是UEFN的巅峰体验!



回到Verse,SpawnProp函数返回一个元组,类型为tuple(?creative_prop, spawn_prop_result)。你可以使用元组的第一个值来获取生成的道具,下面是一个示例:



然后你可以操作这些道具:将它们传送,沿着样条线移动... 这也会移动任何附加到它的设备。检查Verse API,看看你可以用prop做些什么。


5. 在Verse中访问生成的设备


这很酷,但如果我们想在Verse中使用这个设备呢?这就是我们创建的Gameplay Tag发挥作用的地方。目前,这是查询世界中对象的唯一方式;当然,SpawnProp不会返回生成的设备。


使用GetCreativeObjectsWithTag函数,我们可以获取所有带有给定标签的对象。因此,我们可以获取所有带有spawned_campfire_tag标签的对象,并找到我们已经生成的所有营火!看看这个示例:



使用这种方法(并编写更多代码),我们现在可以让所有的篝火在点燃和熄灭之间交替。效果很好!



6. 更进一步


这基本上就是你需要了解的有关生成设备的全部内容了。不过,仍然很烦人的是,我们必须查询所有生成的设备,而不是只获取我们生成的设备。你可以建立一个系统来解决这个问题,通过消除已知的设备,将每个生成的 creative_prop与它们的creative_device相关联。也许有一天我会写一些代码来实现这一点并发布出来,但目前,这是给你的一个挑战!


你可以利用这种方法做很多事情,你可以使用任意数量的Unreal Engine组件!例如,你可以尝试制作一个带有网格、一些Niagara粒子和一个(隐形的)爆炸装置的炸弹;或者使用广告牌设备在移动网格前面显示一些文本。


尽情享受动态内容吧!



文档与教程:
https://dev.epicgames.com/documentation/en-us/uefn/gameplay-tags-in-verse


近期焦点
虚幻引擎5.4现已发布
GDC 2024:来自State of Unreal的重大新闻
欢迎来到全新的虚幻引擎网站
我们将在四月下旬更新虚幻引擎、Twinmotion和RealityCapture的定价
祝贺《War is Over》 荣膺第96届奥斯卡最佳动画短片奖
透过MEGA聊虚幻- 理想汽车设计团队专访
UE动画导入标准流程


扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持;选择“招聘”,即可了解最新招聘信息。

长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。