UE AI里的感知实现流程解析

UE AI里的感知实现流程解析

感知与被感知流程

刺激源的配置与注册
配置结构
UPROPERTY(EditAnywhere, Category = "AI Perception", BlueprintReadOnly)
TArray<TSubclassOf<UAISense> > RegisterAsSourceForSenses;

向刺激源组件UAIPerceptionStimuliSourceComponent中添加配置

注册刺激配置到感知系统
  • 重写父类里的OnRegister函数,过滤掉RegisterAsSourceForSenses里无效的配置,根据bAutoRegisterAsSource的成员变量控制是否自注册到感知系统
  • bAutoRegisterAsSource如果为true则执行RegisterWithPerceptionSystem函数,该函数首先拿到感知系统实例指针,然后迭代配置结构中的UAISense调用感知系统中的RegisterSourceForSenseClass来完成刺激源Sense的注册及刺激源组件持有者的注册
感知组件的配置、注册、与信息更新
感知配置项
UPROPERTY(EditDefaultsOnly, Instanced, Category = "AI Perception")
TArray<TObjectPtr<UAISenseConfig>> SensesConfig;

这是感知类型配置,与刺激源配置不同的是,感知配置对UAISense进行了封装,里面添加了感知间隔的有效时间(Age),调试颜色控制,开启允许与否的控制等

注册感知配置到感知系统
  • 同样的配方,在重写的OnRegister函数里进行处理,首先在持有者AIController的OnEndPlay委托上绑定OnOwnerEndPlay函数,该函数用于在AIController玩法结束时取消所有的感知系统里的感知注册
  • 循环SensesConfig调用RegisterSenseConfig函数,该函数首先对SenseConfig进行脱壳,获取UAISense,然后调用感知系统的RegisterSenseClass函数注册UAISense配置,这个配置与刺激源注册配置是一致的
  • 添加感知组件的PerceptionFilter白名单
  • 设置刺激源留存的最大有效间隔时间(Age),这个留存时间保留在TArray<float> MaxActiveAge里,这个数组的索引与SenseID保持一致
  • 最后一步是调用感知系统的UpdateListener函数来完成在感知系统中的感知注册,该函数做了以下处理:
  1. 检查当前传入的Listener是否有效,如果有效,则说明传入的是已经注册过的Listener,那么调用FPerceptionListenerUpdateListenerProperties函数来更新该Listener的teamid及感知白名单,再调用感知系统的OnListenerUpdate函数,而该函数是迭代了已经注册的Senses配置实例,转调了Sense的OnListenerUpdat
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值