Gameplay定位系统
Gameplay定位系统是创建数据驱动的定位请求的方式。它在Gameplay技能系统插件基础上扩展,但可以在该功能外部使用。
要在编辑器中启用定位系统,你可以找到 编辑(Edit) > 插件(Plugins) > Gameplay > Gameplay技能(Gameplay Abilities) > 定位系统(Targeting System) 。

设置定位系统插件。
数据和设计
定位系统使用 定位预设(Targeting Preset) 。此定位预设是一个数据资产,定义了一组 定位任务(Targeting Tasks) ,这些任务针对执行的定位请求自上而下运行。

TP_Knockback_Pistol 是由Actor类定位任务设置了 Trace 定位任务和 Filter** 的定位预设。
定位预设有一个功能是,每个任务都支持内联属性编辑。你可以定义可复用的定位任务和预设,从而设置任务的行为,而不用为每个任务定义 UAsset
。

在以上两个图像中,追踪类型(Trace Types) 和 必需Actor类(Required Actor Classes) 不同。这在同一个定位预设中执行,而不必选取不同的定位任务。* *
定位任务
定位任务(Targeting Task)是用于执行所需操作的小单元操作。定位任务通常可以分三个类别来考虑,即选择、筛选和排序。
定位任务具有蓝图支持。根据你构造任务的方式,这可能很简单,比如设置类默认属性来处理蓝图可调用事件。

示例:Knockback Pistol Trace 任务设置了两个可重载事件来计算追踪的源位置和方向。在此示例中,如果你查看蓝图代码,你会看到它获取Pawn并调用一个函数来获取摄像机位置和摄像机方向。
即时定位请求
即时定位请求通过调用 UTargetingSubsystem::ExecuteTargetingRequest
函数来执行。定位请求基于 UTargetingPreset
对象,且会被立即执行,因此会在完成前阻止游戏线程。
异步定位请求
异步定位请求通过调用 UTargetingSubsystem::StartAsyncTargetingRequest
函数来执行。定位请求基于 UTargetingPreset
对象,且会被立即执行,但是它不会在完成前阻止游戏线程。
当定位请求需要等待缓慢操作(例如,等待服务器对目标进行身份验证),或等待某个Gameplay事件发生才能完成定位时,这些请求很有用。
GameplayTargetingSystem插件中定义的所有定位任务将同时提供即时和异步定位请求的实现,但是,如果游戏不使用异步功能,不会强制游戏代码同时实现两者。
异步操作 - 执行定位 / 执行筛选
UAsyncAction_PerformTargeting 提供了通用蓝图支持,以启动异步定位请求或筛选操作。
调试
有关调试控制台命令和说明的完整列表,请参阅Gameplay定位调试文档。
开发人员参考
如需深入的工程参考指南,请参阅Gameplay定位插件参考文档。