骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索

简单的agent飞行实现,步兵骑兵皆可

查看数: 3570 | 评论数: 7 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-2-7 22:13

正文摘要:

本帖最后由 杰喵喵 于 2023-11-6 21:37 编辑 简单的agent飞行实现,步兵骑兵皆可,代码简单没有修改原本战团AI,十分傻瓜 一、理论指导: 1.【未写完】打败引擎硬核-关于骑砍各系统飞行等复杂位移功能实现与互相辅 ...

回复

Asterl 发表于 2023-2-17 21:54:33
杰喵喵 发表于 2023-2-15 20:10
B站很多学习编程视频,多写。

好的,谢谢推荐,我去试试,不知道我除了会新建种族外还能学会啥…
杰喵喵 发表于 2023-2-15 20:10:38
Asterl 发表于 2023-2-12 19:51
写这么多LZ辛苦了,学代码基础是啥,不知道要学会PY的哪些才能看懂LZ的代码,我也想飞啊,记得以前有个飞龙 ...

B站很多学习编程视频,多写。
Asterl 发表于 2023-2-12 19:51:13
写这么多LZ辛苦了,学代码基础是啥,不知道要学会PY的哪些才能看懂LZ的代码,我也想飞啊,记得以前有个飞龙MOD做的很粗糙但是可以拿来YY的,代码不会郁闷
阳光肥宅 发表于 2023-2-12 14:16:01
支持支持,搂主加油来自: Android客户端
战争傀儡阿格兰 发表于 2023-2-10 09:35:35
皇牌空战——代号M&B
杰喵喵 发表于 2023-2-8 21:57:27
vegetto 发表于 2023-2-8 12:31
1.整体位移的立体范围除了要考虑竖向限制ground level z的地面高度以外,还要考虑横向平面尺度boundary,也 ...

感谢大佬指点,骑砍MOD制作深似海,受教了
vegetto 发表于 2023-2-8 12:31:55
本帖最后由 vegetto 于 2023-2-8 14:48 编辑

1.整体位移的立体范围除了要考虑竖向限制ground level z的地面高度以外,还要考虑横向平面尺度boundary,也就是整个场景的实际范围。很多时候场景被空气墙挡住了,所以很多人不注意场景之外,即使有地形的地方是没有地形碰撞的。超出boundary的场景范围ground level不存在或者说是无穷大,这时候人向场景地形范围外飞且需要判断降落的时候,如果采用set z to ground level的方式会很快瞬到与太阳光照贴图肩并肩、天空球之外的外太空上并且落在一个隐形面板上。这时候就别想自由落体下来了。

2.ai和玩家在启闭no dynamic状态时需要区别处理会有一些不一样的bug。因为这个操作很冷门,所以官方并没有把它处理的很好。无论是开启和关闭,引擎内部在是否高空需要自由落体和降落地面的判断还是会一直运行,然后高空突然关闭no dynamic时概率性一瞬间冲突使系统误认为已经落地,产生非dynamic影响的滞空bug。这时候无论你再怎么dynamic启闭都回归不了自由落体,特别的有时靠近地面将落地的时候会永久的卡死在地面一点,相当于零高度滞空,这时候不附加判断的话只能等下次如果不影响重启飞行的情况下重启位移,经典案例就是贴吧有的人把攻城车的踏板给抽掉那在踏板上的人就可能不会掉下来。所以要优化位移模式(比如尽量避免用一个非瞬间性的条件持续设置dynamic为某值,这种在取值需要瞬间变化的时候极容易系统冲突产生如上bug等等处理不细说。)和异常位移情况自检判断。玩家其实也会出现这种情况但比较少,因为这个bug也和动作是否允许位移的特性冲突有关,玩家比AI能做的动作和行为更多,所以说不太容易受这种bug影响,可以开关闭自如,只考虑位移。总体上人数越多、高度越高、关闭前的位移幅度较小或者偏上升趋势时、以及关闭前的动作切换这些情况共同决定了这种滞空bug容易出现的程度。

3.in sight这种适合地平面运动关系碰撞判断手段,不太适合立体空间移动模式,因为像高楼林立的场景,六向位移会和障碍物的不规则表面比如有凹凸形状的孔洞和凹槽,一旦贴合没有高强度的碰撞检测就很容易穿膜,lookpos只能防御来自于视线吻合的位移方向的障碍物判断,如果产生了其他方向与视线或者碰撞检测方向角度相差较大的位移,单个in sight或是其他单方向的检测手段并不足以来支持限制改变位移的碰撞需求。所以针对不同的对象碰撞检测往往会使用很多复合,且光光处理好飞行的人与各种prop类型的障碍物完美避免穿入(穿模部分可以不强求,但不能穿入且回不来)就需要消耗大量的性能。


不过,一个最偷懒的方式就是就像汽车一样设置较大的自动刹车距离,避免出现需要贴合障碍物摩蹭的情况。位移碰撞事件不要拆分多个触发器和太高或太低触发间隔,就像汽车刹车一样,有制动距离,因为运动的主动控制延迟因素影响很大,比如你以50的速度时检测碰撞停止或许从视觉暂留看立即停住了,但是以500的速度本以为按照触发写的本意可以在碰撞前紧贴着停下,但是实际上检测到碰撞的瞬间又持续触发多前进了一两百距离,因为本身各个碰撞检测手段有一点极短的反馈时间,微观上同一个触发时刻检测到的碰撞略滞后于此时的位移坐标。而人体在空中面对建筑物就像蚂蚁一样,可以忽略自身碰撞轮廓的各向尺寸,灵活的点对固定的物的碰撞自然要求比较高,而船体庞然大物但相对于自身体型的速度不快,碰撞检测强度就低一些但是对自身碰撞轮廓的范围又要有所判定。所以体型特征、速度越高,需要贴障碍不穿的碰撞检测强度越大。

4,no dynamic为1状态受到连续攻击,特别是远程攻击的时候,容易概率性把动画锁死在受到攻击动画的固定帧上,然后后续进行一些动作的时候,比如说攻击也会一直固定在一个动作姿势上无法系统自发的切换其他动作。所以也要进行异常动作自检。不过这种情况高度越低越容易出现。

5.对于骨骼动作判断位移,注意虽然正常情况nodynamic开启为1后升空还是可以按照地面的wasd采用步行动画等等,但是在某些情况下比如飞行状态启动前的动作以及受击恢复和主动跳跃时,下半身动作会被锁死在jump的loop动作阶段,除非自由落地解除或强制动作,然而默认的步行动作优先级不足以强制覆盖跳跃。所以出现这种情况位移就只有movez了,或许你可以说是抛砖引玉以后引用飞行动作,但加自定义其他动作位移ai行为就也不是由系统动画动作行为来控制了,所以不推荐基础动作行为指导位移,玩家靠按键,ai靠视角目标和逻辑(也就是各种行为变量slot化,在目标相对有指引的情况下,根据想要达成的目标概率化和变量slot化行为并构造触发时间和持续的时间,再根据受限条件改变各行为slot量取值,就像编写主动带cd技能一样处理,把前后左右上下的不同方向飞行等等行为当成不同的主动技能然后进行条件组合)。



比如你的左右walk步行动作的位移控制对于玩家来说是可以用,但是对于ai其实并没有多少用处。像游戏的左右位移,一部分类ad按键一样面向朝前但是左右脚交叉横向步行,但是也可以是w前进和视角转弯配合{像一些格斗游戏比如黑神话就是ad键直接整个身体向wasd对应方向转过去,骑砍是要保证镜头往面向,不同游戏不同处理),对于在高空的ai来说,ai想要去左边的地方更倾向于采用前进动作配合原地视角转弯的行为,就算有左右脚步行持续时间也较小,产生的位移忽略不计,就像骑砍原地防御挥剑也可以原地转弯一样,面朝前的左右位移行为一般游戏只用于游走打量或闪开攻击,真正到跑到目标去打人,晃动身子W前进才是最常见的行为。


6.玩家和ai最好分开写,因为且不说玩家和ai能够主动做的行为数量有很大差别,其次如果玩家和ai的飞行都以高标准处理比如碰撞的问题,性能耗不住,如果都以低标准bug处理会很多。打个比方,ai如果只针对要打人和其他单一明确的目标事件,基本不会像玩家一样瞎走,而玩家说不定突发奇想主动往墙上蹭蹭洞里钻钻,然后我第一点说的地图边界外飞飞,干些无关战斗等正常玩法的事。如果ai我们遇到碰撞可以老远检测让其转弯,那对于玩家如果不让玩家蹭墙钻洞,老远限制运动还以为有空气墙呢。所以对于ai的软限制到玩家身上就要改多上几道硬性限制。因此,玩家和ai的行为事件最好拆开分析,哪怕是其他事件通用,位移和碰撞还有主动动作技能事件这些最好拆开,一个用高端一个用低配。











鲜花鸡蛋

杰喵喵  在2023-2-8 21:56  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2026-1-15 03:33 , Processed in 0.109638 second(s), 33 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表