重写ActorsPerceptionUpdated函数
有委托OnPerceptionUpdated,可以自己编写函数然后进行绑定。也可以直接对ActorsPerceptionUpdated进行重写,该函数会在有感官变化时进行调用
其会根据委托获得一个数组,即AI感知到的所有发生变化的Actor。通过对这些Actor的判断即可判断是进入范围还是离开范围
获取检测结果
UE提供了FAIStimulus结构体来存储检测结果。而对于一个Actor被AI检测的所有信息,则是存储在FActorPerceptionBlueprintInfo结构体中。
可以通过当前AI的感知组件,利用GetActorsPerception函数获得特定Actor的感知信息,该函数会首先对当前Actor是否正在被销毁或者为空进行判断
FActorPerceptionBlueprintInfo ActorInfo;
AIPerceptionComponent->GetActorsPerception(Actor, ActorInfo);
得到ActorInfo之后,可以从结构体中获得LastSensedStimuli数组,该数组存储了最近一次所有感官对于该Actor的结果,通过遍历该数组,可以对某个特定的感知做操作
获取特定的感知类UAISense
可以通过获取当前World中存在的AIPerceptionSystem,该类中可以通过FAIStimulus结构体获取该结构体对应的SenseClass,返回的是TSubClassOf
这是由于AIPerceptionSystem类中存在一个数组TArray<UAISense*> Senses,而FAIStimulus数组中存放这SenseID,该ID就是Senses数组中的下标,通过SenseID既可以获得UAISense
返回结果
通过FAIStimulus结构体中的WasSuccessfullySensed()函数进行返回。
标签:函数,AI,Actor,C++,数组,UE4,感知,FAIStimulus From: https://www.cnblogs.com/XTG111/p/18250756