当前位置: 首页 > news >正文

网站开发 零基础网络设置网站

网站开发 零基础,网络设置网站,wap手机建站平台,网站有信心做的更好声明#xff1a;学习笔记。 在 行为树快速入门指南 中#xff0c;你将学会如何创建一个敌方AI#xff0c;该AI看到玩家后会做出反应并展开追逐。当玩家离开视线后#xff0c;AI将在几秒钟后#xff08;这可根据你的需求进行调整#xff09;放弃追逐#xff0c;并在场景中…声明学习笔记。 在 行为树快速入门指南 中你将学会如何创建一个敌方AI该AI看到玩家后会做出反应并展开追逐。当玩家离开视线后AI将在几秒钟后这可根据你的需求进行调整放弃追逐并在场景中随机移动再次看到玩家时便会继续追逐。 阅读完本指南后你将了解以下系统  蓝图可视化脚本Blueprint Visual Scripting AI控制器AI Controllers 黑板Blackboard 行为树Behavior Trees 行为树服务节点Behavior Tree Services 行为树装饰器节点Behavior Tree Decorators 行为树任务节点Behavior Tree Tasks 操作步骤 一、我们将用需要的资产来设置项目使AI角色在场景中活动。  1、新建第三人称模板游戏项目  2、打开面板右键单击 ThirdPersonBP 文件夹创建一个名为 AI 的 新文件夹。 3、在 ThirdPersonBP Blueprints 文件夹中将 ThirdPersonCharacter 拖到 AI 文件夹上然后选择 复制到此处Copy Here。 4、在 AI 文件夹中基于 AIController 类创建一个新的 蓝图类。将 AIController 蓝图命名为 Enemy_Controller将 ThirdPersonCharacter 蓝图命名为 Enemy_Character。 5、打开 Enemy_Character从图表中删除所有脚本。选择 角色移动Character Movement 组件然后在 细节Details 面板中将 最大行走速度Max Walk Speed 设置为 120.0。 当AI角色AI Character进行巡逻且并未追逐玩家时这会降低它们在场景中的移动速度。 6、从工具栏中选择 默认类Class Defaults然后在 细节Details 面板中将 Enemy_Controller 分配为 AI控制器类AI Controller Class。 我们将会把AI放入场景如果要在该场景加载后生成AI则需要把 自动控制AIAuto Possess AI 设置改为 已生成Spawned。 7、将 Enemy_Character 从 内容浏览器拖入关卡。 在 放置ActorPlace Actors 面板中把 导航网格体边界体积Nav Mesh Bounds Volume 拖入关卡。 8、选中 寻路网格体边界体积Nav Mesh Bounds Volume 后按下 R 缩放体积封装整个关卡。 这将生成寻路网格体使我们的AI角色能够在场景中移动。你可以按下 P 键打开或关闭视口中寻路网格体的显示绿色区域表示可导航的位置。 二、黑板设置 我们将创建 黑板 资产它本质上是AI的大脑。我们希望AI知道的任何信息都会有一个能够引用的 黑板键。我们将创建用于玩家的键用于控制AI是否能看到玩家以及AI不追逐玩家时可以移动到的位置。 1、在 AIArtificial Intelligence 下选择 黑板Blackboard 并将其命名为 BB_Enemy。 2、双击打开黑板单击 创建新键New Key 按钮并选择 Object。黑板 资产由两个面板组成黑板Blackboard 使你能够添加并对 黑板键要监控的变量进行跟踪通过 黑板细节Blackboard Details 能够命名和指定键的类型。 3、针对 Object 键输入 EnemyActor 作为 条目名称输入 Actor 作为 基类。 4、添加另一个 键 将 键类型 设置为 布尔并命名为 HasLineOfSight。这将用于记录AI是否能看到玩家。 5、添加另一个 键Key 将 键类型 设置为 向量并命名为 巡逻位置PatrolLocation。 这将被用来记录AI不追逐玩家时可以移动到的关卡位置。 在 黑板 上设置好需要跟踪的内容后下一步我们将对我们的 行为树 进行布局。 三、行为树布局 通过在 行为树 中布局出AI可能进入的状态有助于你了解进入这些状态需要创建何种类型的逻辑和规则。 1、在 内容浏览器 中单击 新增Add New在 AIArtificial Intelligence 下选择 行为树Behavior Tree 并将其命名为 BT_Enemy。 2、打开 BT_Enemy 并将 BB_Enemy 指定为 黑板资产。 行为树 由三个面板组成可以在 行为树Behavior Tree 图表面板直观地布局定义行为的分支和节点可以在 细节Details 面板定义节点的属性可以在 黑板Blackboard 面板看到游戏运行时的 黑板键 及其当前值这对调试非常有用。 3、在图表中单击鼠标左键并拖出 根Root 节点然后添加一个 选择器Selector 节点。 合成Composites 节点是流控制的一种形式决定了与其相连的子分支的执行方式。 4、针对 选择器 节点在细节Details面板中将 节点名称Node Name 更改为 AI Root。  重命名图表中的节点是一个很好的方法可以很容易地从较高层面识别节点所完成的操作。在本例中我们将其命名为 AI Root因为这是行为树真正的根它将在子分支之间切换。创建行为树时自动添加的默认根节点可用于配置行为树的属性并指定它所使用的黑板资产。  5、单击左键并拖出 AI Root添加一个名为 Chase Player 的 序列 节点。 此处使用了序列节点因为我们打算告诉AI完成一系列动作旋转朝向玩家改变移动速度然后移动并追逐玩家。 6、单击左键并拖出 AI Root添加一个名为 Patrol 的 序列 节点 对于AI我们将使用 序列 节点在地图中找到一个随机位置移动到该位置然后在该位置等待一段时间最后再重复该过程来寻找新位置。 你可能还会注意到节点右上角的数字它表示操作的顺序。行为树 会从左到右和自上而下执行因此节点的排列很重要。对AI最重要的动作通常应该放在左边而次要的动作或退却行为应该放在右边。子分支会以相同的方式执行如果任何子分支失败整个分支将会停止执行导致失败并返回上级树。举例而言如果 追逐玩家Chase Player 节点失败它将返回至上级 AI根AI Root然后转变为 巡逻 节点。 7、从 AI Root 连出引线然后在 巡逻Patrol 右侧添加 等待Wait 任务节点并将 等待时间Wait Time 设置为 1.0。 你可以看到这个节点是紫色的表示它是一个 任务 节点。任务节点是你希望 行为树 执行的具体操作。如果某种原因使 行为树 让Chase Player或Patrol节点皆运行失败那么 等待Wait任务节点将接管事件。 8、从Chase Player 追逐玩家 节点连出引线并添加 旋转至面向黑板条目Rotate to Face BBEntry 节点。  这个特殊的 任务 节点使你能够指定一个想要旋转并面向的 黑板条目在本例中此条目是 Enemy Actor玩家。添加该节点后你会在 细节Details 面板中看到 黑板键 将自动设为 EnemyActor因为它过滤Actor的黑板变量而且是列表中的第一个变量。如果需要调整成功条件范围并更改 节点名称Node Name可对 精度Precision 选项进行调整。 这个未设置会导致 选项中缺少EnemyActor选项。 9、在 工具栏 中单击 新建任务New Task 按钮。 除使用内置任务节点外你还可以创建和指定自己的自定义任务节点可以为这些节点自定义并定义附加逻辑。该任务节点将用于改变AI的移动速度以便它追逐玩家。新建任务节点时将自动创建并打开新的 蓝图。 10、在 内容浏览器 中将该新资产重命名为 BTT _ChasePlayer。 创建 任务Tasks、装饰器Decorators 或 服务Service 节点时建议立即对这些新建节点进行重命名。正确的命名规则是用创建的资产类型为资产命名添加前缀BTT 代表行为树任务节点BTD 代表行为树装饰器节点BTS 代表行为树服务节点。  11、在 BT_Enemy 中添加 BTT_ChasePlayer 任务随后添加 移动至Move To。  我们的新任务目前还没有逻辑但随后将返回来添加改变AI角色移动速度的逻辑之后AI将移动至Move ToEnemyActor玩家。 12、创建一个新 任务节点并将其重命名为 BTT_FindRandomPatrol然后将其连接到 巡逻Patrol 节点。  13、添加 移动至Move To 任务节点并将 黑板键 设为 巡逻位置PatrolLocation。 这将指示AI移动至Move To巡逻位置PatrolLocation该位置将在BTT_FindRandomPatrol任务中进行设置。  14、在 移动至Move To 后添加 等待Wait 任务节点设置 等待时间Wait Time 为 4.0、随机偏差Random Deviation 为 1.0。  这会指示AI在巡逻位置PatrolLocation等待3-5秒随机偏差将在等待时间上或-1秒。 我们已经完成了 行为树 的框架。在下一步中我们将添加AI在巡逻时找到一个随机的导航位置后改变其移动速度的逻辑以及确定AI应该在什么时候追逐玩家或进行巡逻的逻辑。 四、任务设置 - 追逐玩家 在这一步中我们设置了 追逐玩家任务Chase Player Task改变AI追逐玩家时的移动速度。 1、在 BTT_ChasePlayer 中点击右键并添加 Event Receive Execute AI 节点。 当在 行为树 中激活此任务时将触发Event Receive Execute AI节点。 如果代理是AI控制器则应该固定选择AI版本的 Event Receive Execute、Event Receive Abort 和 Event Receive Tick。如果泛型和AI事件版本都已实现则只会调用更合适的版本这意味着会针对AI调用AI版本其他情况下会调用泛型版本。 2、Controlled Pawn 引脚后连接 Cast to Enemy_Character 节点。 在此我们将使用 Cast 节点来访问名为 Enemy_Character 的AI 角色蓝图。 3、在 内容浏览器中打开 Enemy_Character 蓝图并添加一个名为 更新行走速度Update Walk Speed 的 函数 该函数将从我们的行为树中调用并将用于修改AI的移动速度。 从技术角度而言我们可以在追逐玩家任务Chase Player Task中访问Cast节点之后的 角色移动Character Movement 组件并在任务节点中调整移动速度但让行为树直接改变子对象的属性并不是推荐的最佳做法。相反我们可以让行为树在角色内部调用一个函数然后进行所需的修改。  4、在 更新行走速度Update Walk Speed 函数的 细节Details 面板中添加名为 新行走速度NewWalkSpeed 的 浮点 输入。  5、将 角色移动CharacterMovement 组件拖离组件Component选项卡然后使用 设置最大行走速度Set Max Walk Speed 进行如下连接。 从行为树调用这个函数时我们可以传递一个数值作为新的速度。 6、回到 BTT_ChasePlayer 任务节点内从 作为敌人角色As Enemy Character 节点调用 更新行走速度Update Walk Speed 函数并设置为 500.0然后按下图进行连接。 如果看不到已创建的 更新行走速度Update Walk Speed 函数你可能需要先 编译 Enemy_Character 蓝图然后才能将其添加到 追逐玩家任务Chase Player Task 中。 7、在 更新行走速度Update Walk Speed 之后添加两个 结束执行Finish Execute 节点并按下图进行连接。 我们成功将其投射到Enemy_Character后我们在此将该任务标记为成功结束。如果被控制的Pawn不是Enemy_Character我们需要处理这种情况所以我们将任务标记为不成功将任务中止。 8、右键单击 新行走速度New Walk Speed 引脚然后将其提升为变量并命名为 追逐速度ChaseSpeed。 9、必须启用 追逐速度ChaseSpeed 的 实例可编辑Instance Editable。 将 最大行走速度Max Walk Speed 的数值提升为 实例可编辑Instance Editable 变量后我们便可以从蓝图外部对其进行设置并将该值作为 行为树 的内部属性进行调用。 我们现在可以很轻松地改变被发送至 Enemy_Character 蓝图的 追逐速度Chase Speed 数值以便调整AI追逐玩家的速度。 我们完成了 追逐玩家任务Chase Player Task下一步我们将设置 寻找随机巡逻任务Find Random Patrol Task 逻辑让AI获得可前往的随机位置。  五、任务设置 - 寻找随机巡逻 在这一步中我们将设置 寻找随机巡逻任务Find Random Patrol TaskAI没有追逐玩家时就会移动到一个随机位置。 应用蓝图行为树任务节点是一种快速迭代的明智方法。但是如果需要考虑性能问题那么你可以决定转移至本地行为树任务节点。 1、在 BTT_FindRandomPatrol 中使用 Event Receive Execute AI 和 Cast to Enemy_Character 2、在 作为敌人角色As Enemy Character 之后调用 更新行走速度Update Walk Speed并将 新行走速度New Walk Speed 提升为一个变量命名为 巡逻速度Patrol Speed设置步骤如下 勾选可编辑实例默认值125.我们在此处降低了敌人巡逻时的移动速度。 3、在 Controlled Pawn 之后连出引线连接Get Actor Location然后设置 GetRandomReachablePointInRadius其 返回数值 需连接至一个 分支蓝图节点。 4、使用以下设置将 GetRandomReachablePointInRadius 上的 半径 提升为变量PatrolRadius,勾选可编辑实例编译后默认值设为1000. 此处我们在敌人角色当前位置的1000个单位内寻找一个随机位置。我们还要使用分支节点处理无法找到要移动到的随机点这种极端情况。 5、在 随机位置Random Location 引脚后连出引线使用 设置黑板数值作为向量Set Blackboard Value as Vector并将 键Key 提升为名为 巡逻位置PatrolLocation 的变量。 6、使用另一个 设置黑板数值作为向量Set Blackboard Value as Vector 节点设置该 数值 的来源为 Get Actor Location。 7、继续上一步如下所示连接两个节点使得 结束执行Finish Execute 被标记为 成功Success。 如果敌人找到了一个要前往的随机位置它将作为要前往的位置被存储在黑板中。如果找不到位置它将使用当前位置并在尝试新位置之前保持不动。我们还需要对受控Pawn不是Enemy_Character的极端情况进行处理。 8、从 Cast 节点的 Cast Failed 引脚连出引线使用 结束执行Finish Execute节点将 成功Success 禁用。 如果受控Pawn不是Enemy_Character此任务将被标记为不成功并被中止。 我们已完成 寻找随机巡逻任务Find Random Patrol Task。在下一步中我们将学习更多关于 装饰器节点 的知识以及它们如何被用作条件语句、如何设置AI控制器。 六、AI控制器设置 在这一步中我们将在AI控制器内部进行设置为最后一步做准备设置一个 装饰器节点 来决定进入 行为树 的哪个分支。  1、在 内容浏览器 中打开 Enemy_Controller 蓝图添加一个 Event On Possess 节点 2、从 Event On Possess 连出引线添加一个 运行行为树Run Behavior Tree 节点将其 BTAsset 设为 BT_Enemy。 运行行为树 节点是以AI控制器类蓝图为目标的情境函数调用使你能够执行指定的 行为树 资产。 3、在 组件Components 窗口中单击 添加组件Add Component搜索并添加 AI感知组件AIPerception Component 4、AI感知组件AIPerception Component 用于在 AI感知系统AI Perception System 中创建一个刺激监听器收集可以响应的已注册刺激本例中我们可以使用视觉。这将使我们能够确定AI何时能实际看到玩家并做出相应的反应。 使用 按归属检测检测Detection by Affiliation 属性可以建立基于团队的AI与相同归属的队友并肩作战攻击敌方成员。默认情况下 Actor 不会被指定归属会被视为中立。 目前你还不能通过蓝图分配归属因此为了检测玩家我们要启用 检测中立方Detect Neutral 标签。另外一种方法是使用 Actor标签Actor Tagging 来确定哪个角色是玩家并强制AI角色只追逐被标记为玩家的Actor。 5、在 AI感知AIPerception 的 事件Events 部分点击 On Target Perception Updated 旁边的  符号。 6、在图表中 On Target Perception Updated 后连出引线添加一个 Actor Has Tag 节点将 Tag 设为 玩家。  7、从 刺激Stimulus 引脚添加 Break AIStimulus 节点。 8、添加 分支 节点将其 条件Condition 按照下图进行设置。 此处我们检查该Actor是否被成功感知以及该Actor是否拥有玩家标签。 你可以选择 Break AIStimulus 节点在 细节Details 面板中使用 隐藏未连接的引脚Hide Unconnected Pins隐藏所有未连接的引脚使你的图表看起来与上图相似。 9、从该 分支 的 False 连出引线使用 按事件设置定时器Set Timer by Event将其 时间Time设为 4.0。 10、右键单击将 时间Time 提升为变量并将其命名为 Line Of Sight Timer。 该变量和指定的数值将决定AI在多长时间后将放弃追逐玩家并在此时执行附加的事件。 11、右键单击 按事件设置定时器Set Timer by Event 的 返回数值Return Value将其提升为名为 敌人计时器EnemyTimer 的变量。 这通过 句柄Handle 的方式保存对定时器Timer的引用。该句柄可以通过脚本调用从而使自身无效并清除任何相关事件防止相关事件被执行。我们可以在稍后当AI在Line of Sight Timer耗尽之前再次看到玩家时使用该节点这可以防止AI让玩家离开视野并放弃追逐。  12、创建一个 自定义事件并将其命名为 StartEnemyTimer然后将其连接至 按事件设置定时器Set Timer by Event 的 事件Event引脚。 13、单击右键然后在 变量 AI 下添加一个 获取黑板Get Blackboard 节点。 14、在 黑板Blackboard 后连出引线使用 Set Value as Bool 和 Set Value as Object并按如下所示进行连接。  这使我们能够更新用新数值定义的 黑板键。 15、右键单击并将两个 键名Key Name 分别提升为名为 HasLineOfSight 和 EnemyActor 的 变量。  16、编译 蓝图并将两个 键名Key Name 的 默认值 分别设置为 HasLineOfSight 和 EnemyActor。  17、断开 分支 的 True使用 Get EnemyTimer然后使用 Clear and Invalidate Timer by Handle。 当AI看到玩家时它将清除Line Of Sight Timer直到它再次让玩家离开视线新的Line Of Sight Timer将从这里开始。 18、复制并粘贴 黑板 节点如图对 将数值设置为Set Value as 节点和 键名Key Name 节点进行设置。  19、在 Set Value as Bool 节点上启用 Bool Value并将 Actor**引脚拖至 Object Value**如图所示。 这会把 Has Line Of Sight 的 黑板键数值Blackboard Key Values 设为 True并把 EnemyActor 设置为被我们感知的 Actor我们已将其设置为只有玩家才能使其触发。 千万注意默认值为键值。 20、单击 编译Compile 进行编译然后关闭蓝图。 七、装饰器及最终设置 在最后部分我们会调整玩家角色和敌人角色蓝图上的一些设置。我们还会在 行为树 中设置 装饰器节点它将根据特定条件决定我们可以进入哪个分支。 1、在 内容浏览器 中的 内容 第三人称蓝图 蓝图Content ThirdPersonBP Blueprints下打开 第三人称角色ThirdPersonCharacter 蓝图。在 细节Details 面板中查找并添加 标签并设置为 玩家。  2、打开 AI 文件夹中的 Enemy_Character 蓝图。 在 细节Details 面板中查找 旋转Rotation 并启用 使用控制器旋转YawUse Controller Rotation Yaw。 这会使AI在从我们的 行为树 调用 旋转至面向黑板条目Rotate to face BB entry 时进行正确旋转。 3、打开 BT_Enemy右键单击 追逐玩家Chase Player然后在 添加装饰器..Add Decorator.. 下选择 黑板Blackboard。  4、参数设置如下 将观察者终止Observer aborts 设为 两者Both** 将 黑板键Blackboard Key 设为 HasLineOfSIght 将 节点名称Node Name 设为 Has Line of Sight? 我们在此说明当 HasLineOfSight 的数值为 已设置Is Set 或为true时会执行这个 追逐玩家Chase Player 分支。观察者终止Observer aborts 中设置为 两者Both 意味着当我们分配的 黑板键 改变时中止本身追逐玩家和任何低优先级的任务。这意味着当 HasLineOfSight 的数值改变且未设置时其将中止自身追逐玩家此时将执行下一个分支巡逻。当 HasLineOfSight 数值再次变成 已设置Is Set 时观察者将中止优先级较低的任务并使 追逐玩家Chase Player 分支能够再次被执行。  5、编译 并关闭 行为树然后在编辑器中 运行。 八、最终结果 你现在可以对AI进行测试它看到你的时候便会尾随着你。 当你走出AI的视野后它仍然会尝试追踪并重新让你进入视线。输入 Line Of Sight Timer 数值后它将放弃追逐返回巡逻状态。 你可以在运行时观察 行为树 的运行情况看它如何在不同的分支之间切换。当你在进行游戏的时候也可以在 行为树 中观察这些变量以了解AI当前的数值。 九、自行设置 现在你的AI角色将追逐玩家如果在特定的时间之后没有看到玩家它会返回巡逻状态你可以尝试在 行为树 中添加以下元素 在 行为树 中向两个 移动至Move To 任务节点添加新的 服务 节点该服务集成了优先于它的 任务 节点的功能。 我们最初的 行为树 使用了一个单独的 任务 节点调整移动速度在追逐玩家的情况下和寻找一个随机的巡逻位置并降低移动速度在巡逻的情况下。将这些转换为附加到 移动至任务Move To Task 的 服务 节点。 提示服务 节点中的脚本类似于每个 任务 节点中的脚本但是你最好使用 Event Receive Activation AI而不使用 Event Receive Execute AI。因为它们是 服务 节点所以你也不需要 结束执行Finish Execute** 节点。 不要使用随机巡逻点来移动。创建一个 巡逻路径蓝图其中包含一个 数组变量的向量数值AI可以在这些向量之间移动。 提示循环并获取数组中的下一个条目从而在各个位置之间移动AI然后根据数组中的当前条目更新 黑板键 的数值 巡逻位置PatrolLocation。 当玩家走出视线后将AI移动到玩家最后已知的位置而不是获取玩家的当前位置。 提示在 转向和追逐玩家Turning and Chasing the Player 的 移动至Move To 命令中你需要指定一个位置而不是使用 EnemyActor因为它当前被设为获取 EnemyActor 的位置它会获取玩家的当前位置。 当AI追上玩家后为其增加攻击功能。 提示添加一个新的 合成 节点作为 转向和追逐玩家Turning and Chasing the Player 的 后台任务Background Task。当AI追上玩家后为其增加攻击动画的 任务 节点。
http://www.dnsts.com.cn/news/219346.html

相关文章:

  • 江西省城乡建设厅网站证件查询重庆潼南网站建设哪家便宜
  • wordpress 绝对路径seo关键词排名注册价格
  • 郑州网站建设渠道云windows电脑
  • 网站背景更换房管局官网
  • 农家乐网站建设方案网站做联盟收入
  • 百度云wordpress建站浦东网站开发培训班
  • 口腔医院网站源码竞价系统
  • 东莞seo建站怎么投放河南推广网站
  • 哪里有网站培训的网站添加模块
  • 涿州做网站公司聊城做网站费用
  • 案例展示网站西安优化多钱
  • c2c类型电子商务网站wordpress只能建博客吗
  • c 网站开发哪些框架wordpress 线条不显示
  • 自己做网站需要什么程序网站如何快速被百度收录
  • 做业务不花钱的网站有哪些wordpress5.03下载
  • 网络公司做网站服务器宁波seo教学
  • 云主机是不是可以搭建无数个网站广州做营销型网站哪家好
  • 互联网 网站建设wordpress仿搞笑
  • vue.js网站建设网站搭建多少钱logo修改
  • h5页面制作网站免费做网站退款怎么做会计分录
  • 抚州建设银行网站知网被罚8760万
  • 网站标题用什么符号郑州金水区网站建设
  • 化妆品网站建设实施方案网站设计的优缺点
  • 万网速成网站有哪些 功能如何查网站处罚过
  • 黄浦网站建设公司常州网上挂号预约平台
  • 免费建站源码网站设计师前景
  • 贵阳门户网站谁有做爰网站号
  • 自建网站的步骤wordpress文章怎么加分享
  • 网站方案军事新闻播报最新
  • 做网站开发用什么软件南昌的网站推广公司