AI的行动主要逻辑位于BehaviorTree内,AI的主要行动实现主要位于AIController中,而AI的记忆主要位于Blackboard内。下面是一些基本概念:
1.BehaviorTree内部含有一个成员是Blackboard。所以我们一般只给一个AICharacter内部设置一个成员BehaviorTree就行了,而在Editor内把Blackboard指认给BehaviorTree。
2.Editor内的Blackboard实际上是一个UBlackboardData,而不是一个Component,BehaviorTree内部的Blackboard成员是UBlackboardData。Component用于AIController内,在AIController我们会声明一个UBlackboardComponent,而在Editor里边创建的是一个UBlackboardData,是不一样的数据结构,UBlackboardComponent的初始化函数InitializeBlackboard接受一个参数是UBlackboardData。
3.UBlackboardData是初始化UBlackboardComponent的参数数据,而我们之后的操作主要在UBlackboardComponent上完成。比如UBlackboardComponent的函数SetValueAsVector就是给Blackboard上的一个Vector参数赋值。
4.BehaviorTree和Blackboard比较类似,也是有一个UBehaviorTree类型和一个UBehaviorTreeComponent类型,主要操作位于UBehaviorTreeComponent上,UBehaviorTree内只是数据。比如UBehaviorTreeComponent的一个函数是StartTree,而参数是UBehaviorTree。
5.可见Component一般实现逻辑,而需要用到的数据都是另一种类型。我们一般把数据部分,就是UBehaviorTree和UBlackboardData放在Character中,而把对应的两个Component放在AIController中,每次使用AIController调

本文介绍了在UE4中如何初始化AI的C++代码,包括BehaviorTree、AIController和Blackboard的使用。重点讲解了BehaviorTree的数据结构与组件,以及Blackboard的数据类型和操作方法。通过在AICharacter中设置UBehaviorTree,在AIController中设置UBlackboardComponent和UBehaviorTreeComponent,实现了数据与操作的分离。同时强调了在C++中添加AIModule以确保构建时包含AI相关模块的重要性。

2518

被折叠的 条评论
为什么被折叠?



