UAISense
的辅助结构
UAISenseEvent
事件结构
UAISenseEvent
本身更多的是充当类似于接口的功能,最关键的函数定义是GetSenseID
,这个函数交由继承的子类负责实现,而子类会通过UAISense::GetSenseID(UAISense_XXX)
获取全局唯一的实例SenseID,GetSenseID
函数最终会调用GetDefaultObject
里的SenseID,GetSenseID
获取到的ID可以作为获取实例的索引,在感知系统中,通过传入的UAISenseEvent
获取ID,再遍历Sense调用指定Sense的事件注册函数,转到Sense中时,会尝试转换为自身定义的事件类型,添加到事件结构里,等待Update循环遍历处理- 从整个执行的流程来看
UAISenseEvent
主要为了完成向UAISense
投递数据,无论是从Sense本身,还是从感知系统,最终会把事件投递到Sense里的事件数组里,比如UAISense_Hearing
的TArray<FAINoiseEvent> NoiseEvents
,UAISense_Damage
里的TArray<FAIDamageEvent> RegisteredEvents
- 感知系统里维护了三个事件相关的模板函数
OnEvent``OnEventBatch``static OnEvent
以及两个蓝图可调用的两个函数ReportEvent
、static ReportPerceptionEvent
,这些函数最终会索引到指定的Sense实例,转调Sense里的注册事件函数,与感知系统相对应,Sense类定义的同义的函数。如果有注册事件的需求,那就可以实现UAISense
基类里的RegisterWrappedEvent
或者对应感知系统里的事件函数,接收事件并处理即可
UAISenseConfig
辅助配置结构
UAISenseConfig
本身为UAISense
提供了调试颜色,过期遗忘控制变量,开始时启动,感知名缓存,获取感知ID方法等- 继承自
UAISenseConfig
的子类充当该Listener感知Sense的参数配置,通过这些配置完成一个实例Listener的定制化需求 - 比较典型的配置是
UAISenseConfig_Sight
,视觉配置的参数在AIHelpers.h
里的CheckIsTargetInSightCone
函数调用中使用,而该函数正是在UAISenseConfig_Sight
的Update
函数中被调用