zoukankan      html  css  js  c++  java
  • 迈布-----UE4AI自动巡逻与攻击

    这个行为树给我恶心的都想吐,我用的是4.24,跟着官网做达不到那个效果,跟着视频做也达不到那个效果,跟我弄的非常不耐烦,最后终于在今天整出来了。有的地方用了一下我自己的逻辑。//诸位依靠教程的,一定得自己动脑思考,锻炼独立编码的能力,不要“过度”依赖教程,要学会举一反三

    我用的是第三人称模板

    OK,我来给你从1讲到8,其中一个没啥用

    首先第一个,是行为树里面的一个服务,

    ps:若不知道行为树服务是什么的话参考官方文档:https://docs.unrealengine.com/zhCN/Engine/ArtificialIntelligence/BehaviorTrees/BehaviorTreesOverview/index.html

    里面的逻辑我当你说一下,获取玩家坐标,AI坐标,玩家到AI坐标相减画一条线,最后合一,好像叫什么Nor......,我们就记他Nor,这个是合一向量的,

    之后去前方坐标,Forward,这两个东东点乘,也就是dot,然后去反余弦值,判定,是否在55°角之内,设一个if分支

    如果是,则说明看见玩家了,采用追逐(Attack),如果没有,采用不追逐(Idle)

    ps:若不知道点乘:https://blog.csdn.net/kebu12345678/article/details/80724336    这个博客可以参考一下。

    第二个,黑板,节点:TargetActor,Object类型,底下要设为Actor;枚举类型:目的是定义AI攻击还是不攻击(巡逻),两种状态,Idle,Attack,均为枚举类型

    那么第一个蓝图,行为树服务蓝图就可以设置黑板值了,蓝图SetBlackBoardASObject,新建一个变量,类型为BlackBoardKey,名字TagetActor,把它和蓝图SetBlackBoardASObject键值连上,还有个Object就是GetPlayerCharacter,我是凭记忆写的不一定正确,把它和Object连上。

    设置枚举,SetBlackBoardAsEnum,枚举在黑板上确认使用上图第5个,也就是AI_Enum,枚举选项选择那个Attack,不是idle。因为已经发现玩家了,应该是攻击

    忘了说了第一个一开始调用的是 事件 Tick AI,我是凭记忆写的,每秒更新AI,

    在if那个false分支上,重复上面的,调用Idle,好像还有个事件,再次调用AI,好像是A打头的,事件  A......   AI......

    在那里再调用一遍SetBlackBoardAsEnum 值为Idil

    在这里设置速度,因为我是默写,所以把思路写下来:

    首先先GetMovementComponent,castToMoveComponentCharacter,SetMaxWalkSpeed,

    我头疼就头疼在这儿,因为我一设置单独的速度task,或者函数,寻路就不成功,所以我把它给设置到服务里了。

    这个是行为树,我追逐玩家和巡逻的行为树,

    第4个,控制蓝图,一定要把AIcharacter类里面的AI控制改为这个我们新建的AI控制,我这个是AI_Controller,设置的话在组件图标中最上面的,细节面板应该能看到,第8个就是我的character,我把第三人称那个给拷贝了一份,然后清空里面的事件。摄像机和弹簧臂我都给删了。

    控件蓝图需要写一个EventBegin,就是默认三个事件中的最上面的那个,让RunBehaviourTree与他连接。

    别忘了把BehaviourTree设置为我们新建的Tree,我这个是AI_BT,蓝图节点有选项的,选择我们建的蓝图就可以了

    第6个巡逻,我不写了,太累了,上图讲一下重点。

    主要用到MoveToLocation,移动到坐标,下面的三个是检测移动成没成功,成功后,FinishExcute结束事件,我觉得没有必要,直接一个结束事件得了

    ReceiveExcuteAI,这个节点是此任务运行时,就是行为树指到到你这个任务时出发的,上面4个是设置速度的,那个GetRandomLocation...的是获取随机坐标,

    我直接用ActorLocation。

    上面那个树节点MoveTo是移动到,选择器上的装饰器设置如下:

    开发一定要自己动脑,不要“过度”依赖教程

    后记:Nav...mesh打头的在编辑器界面左面搜索,这个是路径追踪,让它覆盖游戏中的所有物体,然后按下P键即可设置完毕,设置完是绿色的。

  • 相关阅读:
    Django学习2
    Django学习1
    python 基于tcp协议的文件传输3_解决粘包问题
    python socketserver
    python hashlib
    python struct模块
    python json 模块
    python socket模块
    13暑假集训#10 总结
    hdu 4493 卡输入输出
  • 原文地址:https://www.cnblogs.com/tilyougogannbare666/p/12078558.html
Copyright © 2011-2022 走看看