求助帖!!!大佬们能帮我看看这个寻路策略,有米有米1K

目前正在制作一个单机的坦克对战游戏,但在制作人机坦克脚本的时候效果不太好,大佬们有没有好的思路

(1)目前敌方坦克 AI行为逻辑如下,首先AI在初始化的时候会根据地图上存在的坦克寻找一个目标。

(2) 目前玩家坦克成为目标的概率为30%+1/现在存在的AI坦克数,也就是当场上存在3辆坦克时玩家成为目标的概率为30%+1/2=80%;s存在两个坦克时为30%+1/1=130%也就是必定成为目标。

(3) 坦克每十秒钟更新一次目标,根据AI的目标,AI每1.5s进行一次寻路,根据寻路得出的结果,设置一个从第一步到第二步的方向向量的一个线速度进行移动。

(4) 如果AI寻路算法寻路到目标的路径小于2步或者没有路径,AI会进行一个3.5s到0.5s的随机移动。

现在采用的策略逻辑看起来笨笨的,坦克总是互相寻路堆在一起,有什么好的策略让坦克看起来聪明点吗?像真人在操控一样。

你的需求都理清楚了,可以用这个money直接开一个cursor账号,让AI帮你写,一直调试到你想要的效果为止。

3赞

哈哈哈哈,善良的大佬

1赞

地图不复杂的话,不用寻路了,用普通的steering(追逐)+避障就可以了,根据情况也可以动态修改策略。
主要原因是寻路的路径比较固定,对于动态移动的物体和障碍的适配性不好。还不如直接根据条件移动,也更像真人的判断。
当然地图比较复杂的话,普通的追逐就会卡在死路里面,你可以尝试一下,不行再说。

2赞

坦克成为目标的逻辑为什么要以数量?
理论上是坦克随机一些路线进行游走,游走过程中根据坦克的远近做为发现对方概率大小的正相关因子。
还有通常如果开炮后,相当于拉了仇恨,因此开炮事件应该作为锁定目标的一个触发事件。

锁定以后,通常是根据范围开炮,逃出攻击范围后进入追击状态。逃出追击范围重新进入巡逻态。

坦克类型游戏有一个身位的问题,如果你坦克可以8方向开枪的话,那问题不大,如果只能左右开枪或者开枪只能在一个扇形区域,就必须调整战位。
一个可行的方法是A被B锁定的时候,B也尝试锁定A,去同时规划两个对象的目标位置。

如果 B 已经锁定对象C,A 要根据 B 的状态去评估移动目标。

这个整体策略还是要自己把控。

4赞

推荐使用有限状态机来进行编写

1赞

问题:坦克总是互相寻路堆在一起
因为寻路的时候,虽然起点不同,但是终点相同,导致多个Ai寻路,总会汇集到一起。
解决这个问题:比如你用A*寻路,ai寻找目标,假设先检查水平移动评估,再垂直移动评估,当两个评估一样,你可能就直接水平移动了(因为if else)
修改:当水平和垂直移动评估一样,你随机选一个,这样得到的寻路就会水平,垂直的交替移动,就能避免都走一条路

1赞

有限状态机比较简单,能胜任大多数需求。
一般我都是2个状态机。
一个是动作状态机,一个是决策状态机。

行为树也可以,目前战斗比较少用到,主要是引导模块用。

https://github.com/Gongxh0901/kunpocc-behaviortree

行为树 用来做决策还是很舒服的

1赞

行为树决策上是容易很多。能满足需求的话,擅长哪个就用哪个

1赞

你的逻辑似乎有问题啊,如果是随机目标的话,比如A坦克追着B跑,B追着C跑,C追着D跑,然后在某个目标坦克的目标是前面的链条当中的一个的时候,最终所有的坦克都会追到一起的,架设D追着A跑,那么就相当一个环,这个环在不断的缩小,最终肯定会叠在一起啊。

1赞

敌方坦克不应该随机一个玩家坦克追着跑吗?追着自己跑是什么鬼

嗯嗯 是的,如果是很复杂的行为,行为树用起来会省很多事,简单的行为,有个状态机就够用了,行为树还会增加复杂度,肯定是哪个熟悉用哪个

1赞

你的一切需求都是基于寻路基础的,我刚好略通高效寻路和路径移动,可以加Q/V:3264876581 详聊
我的寻路地址https://github.com/3264876581/goAstar

1赞

简单逻辑 状态机
复杂的 行为树
更复杂的:Goap 目标导向的AI

可以改下坦克移动速度,有的超级快,有的很慢,追上立刻干掉上个坦克或者被干掉,这样应该可以解开叠加的情况

1赞

参考 吃豆人AI

1赞

目前Ai还达不到这个高度,不过Ai倒是可以帮你分析逻辑,理清步骤,助力你来一步一步来实现这些Ai行为逻辑

1赞