博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AI小心得
阅读量:4552 次
发布时间:2019-06-08

本文共 1845 字,大约阅读时间需要 6 分钟。

在做AI的时候不要只顾着编写程序,一定要将前提条件确保没问题。第一点:重中之重:(做了很多,就是不会Move,浪费了1个小时才想起来没有做这么关键的一步):设置导航区域!!!!!!!!!!!

导航区域的设定:Navigation导航,在Modes面板中搜索Nav关键字就会出现很多的导航区域的选项,一般使用的是NavMeshBoundsVolume,这是最常用的,作用是设置需要的导航区域,NavModifierVolume    Modifier修改,顾名思义作用是对已有的导航区域进行修改,

NavLinkProxy,一个案例说明这个的作用就是,从一个台阶上跳下,如果不是用这个导航得话,怪是不跟着你跳的,但是可以使用这个来使怪物跳下台阶。其他还有两个,学过之后再做介绍。

A*算法     BSP   都是导航算法

为什么要创建一个AIController去控制行为树呢,主要是因为AIController中有一个隐藏的组件(C++中写有)BrainComponent,这个组件就是用来执行行为树的。如果说先要在别的蓝图中执行行为树的话也可以,但是要在C++中添加一个BrainComponent才可以使用,但是这里又有一个问题了,即使这么做了也是要注意在Task中事件驱动分别有两个版本,一个带有AI,一个不带。在别的蓝图中执行行为树只能执行不带有AI的事件驱动,因为带有AI的事件驱动只能在AIController中执行,而且在AIController中执行时带有AI的事件驱动的优先级要比不带的要高,从下面可以看出,若是Graugh中存在带有AI的但是后面没有写东西,也会执行带AI的不去执行不带的。

 

 

但是行为树有并不是跟AIController绑定的,而是在其中通过RunBehaviorTree来实现的,所以是可以控制切换的,在AICintroller中可以实现多个行为树。

这里插入一个有用的节点SetFocus(可以朝向目标)跟MoveComponent中的Orient(朝向)Rotation to Movement有关。

上次介绍了Decorator(装饰)中的BlackBoard,现在说下Decorator在行为树中扮演的角色,其实是一种条件判定,其实也可以讲条件写在Task中,但是出现了Decorator将条件写在其中并付给Composites。Service其实并不是必要的元素,但是他的存在会带来方便。主要说下行为树的运行机制:Root就像一个Main函数一样,提供一个入口,接下来应该就是Composites了,下面的运行机制是这样的:Selector1中的子节点中通过FinishExecute来返回是否成功,如果返回不成功,那么将信息反馈给Selector1,如果Selector1还有其他子节点,那么就进入其他子节点,在其他子节点中如果返回成功,将信息反馈到Selector1中,那么此时Seklector是成功的,此时他就要向上一级(假如上一级是Selector2)反馈自己是成功的,那么上一级(Selector2)也就成功,并不会执行其他子节点,就会再向上返回自己成功的信息。以上是一种情况,假如Selector1所有的子节点执行完毕,但都是失败的,那么此时Selector1也要向上一级返回,因为他已经执行完毕了,但向上返回的信息是不成功的,那么此时上一级在进行判断。Sequence则相反,遇到自己子节点不成功的就直接返回上一级,并反馈信息不成功。

在这里关键是注意Composite节点的返回跟成功与否是独立的,成功与否只是一种信息传递,而每一个节点执行完毕都要返回上一级的,不一样的就是Selector只要检测到有一个节点返回成功,那么他就是成功的并且视为执行完毕返回上一级,Sequence则是一旦检测到失败就是失败的并是为执行完毕返回上一级。

 

 

这里还有一个东西可以记一下,说是有这么一种情况,当AIPawn移动时,如何能控制其移动到目标后干什么呢,如何获得移动到目标的信息呢,可以用BindEventToReceiveMoveCompleted,引出事件通过枚举来写要执行的事件,这个事件分发器是引擎帮助调用的,在Move到目标点后调用这个事件分发器,执行事件。在Controller中还有一些引擎帮助调用的这样的事件分发器,以后接触到接着说。

 

转载于:https://www.cnblogs.com/wbx-Blog/p/7147671.html

你可能感兴趣的文章
从零开始搭建高性能高可用Tomcat服务器
查看>>
js class类名操作
查看>>
HDU5441 Travel (离线操作+并查集)
查看>>
idea主题包下载(推荐)
查看>>
Oracle数据库高效sql语句的整理
查看>>
75. 颜色分类
查看>>
Ubuntu Desktop上安装VNC Server
查看>>
su到普通用户不能起图形 解决办法
查看>>
CentOS7系列--4.1CentOS7中配置DNS服务
查看>>
nginx 源码学习笔记(十二)——基本容器——ngx_buf
查看>>
MyEclipse配置和使用Maven
查看>>
rabbitmq学习笔记
查看>>
[poj2828] Buy Tickets (线段树)
查看>>
面试题收集---grep和find的区别
查看>>
Python自定义包在linux服务器导入错误的解决办法
查看>>
PHP中的函数嵌套层数限制
查看>>
AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码
查看>>
改善程序与设计的55个具体做法 day3
查看>>
IOS HTML+CSS+JS 总结
查看>>
easyui datagrid单击单元格选择此列
查看>>