SmartObject是UE5新出的一项针对AI的功能,可为开发者提供如公园长椅、货摊等交互对象的统一外观封装,如UE的CitySample(黑客帝国Demo)中就运用到了SmartObject。
但SmartObject实践起来较为繁琐,主要依赖于AI及行为树,并且在UE5.3中这个模块更换了Claim接口,使其无法在纯蓝图配置中跑起来,因此本文将用一个简化的案例并配合UE5.2版本演示该模块使用。
1.SmartObject配置
首先打开插件SmartObject、GameplayBehaviorSmartObjects:
右键可创建SmartObjects的定义:
添加一个Slot并设置Behavior Definitions:
这个设置类似于给公园长椅设定座位位置,该位置可以是大概位置,因为具体逻辑可以在触发时进行处理。
Behavior Definitions的参数必须填写,目前是强绑定关系。
新建空Actor蓝图,添加SmartObject组件并设置刚刚配置的资产。
将该Actor放置于场景任意位置。
2.AI配置
接下来需要配置一个简单的AI角色,以触发SmartObject。
AI角色以及行为树的创建请看这篇文章:
https://blog.csdn.net/grayrail/article/details/130389966
配置好后,创建如下3个对象,其中行为树可以先不急着创建具体节点:
打开行为树,创建一个AI Task用于处理SmartObject的查找和触发:
重写节点Receive Execute AI,编写AI Task执行逻辑:
上述逻辑通过节点Find Smart Objects查找场景中2000左右范围的SmartObjects对象,并返回为数组。
继续编写Branch右侧逻辑:
这里通过关键节点Claim预定该SmartObject的使用,防止别的使用者也查找到该SmartObject。通过Claim Handle可以拿到该Slot进行下一步处理,例如这里就将AI位置设置给了Slot。
网上教程用节点Use Claimed Gameplay Behavior Smart Object比较多,该节点可以调用AI移动至目标点,然后触发Behavior,但需要布置寻路网格比较麻烦,因此这里直接设置位置表示触发完成。
最后,使用完Claim Handle后,调用Release接口,释放占用: