骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 3176|回复: 4

[求助] 关于指定ai攻击某个对象的问题

[复制链接]

5

主题

25

回帖

14

积分

随仆

Rank: 1

UID
3131813
第纳尔
98
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2020-1-29
鲜花(1) 鸡蛋(0)
发表于 2020-2-17 23:02:35 | 显示全部楼层 |阅读模式
如题,我想制作让ai攻击建筑的功能。建筑已经有接口可以设置血量啥的,但是看了header_operation.py,愣是不清楚哪个函数可以达到agent攻击指定agent或者指定scene_prop instance的效果

5

主题

25

回帖

14

积分

随仆

Rank: 1

UID
3131813
第纳尔
98
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2020-1-29
鲜花(1) 鸡蛋(0)
 楼主| 发表于 2020-2-19 01:27:44 | 显示全部楼层
重要提问啊,没人有兴趣吗?

202

主题

984

回帖

986

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14521
精华
0
互助
90
荣誉
18
贡献
325
魅力
775
注册时间
2017-11-5
鲜花(428) 鸡蛋(0)
发表于 2020-2-19 12:26:33 来自手机 | 显示全部楼层
本帖最后由 vegetto 于 2020-2-19 14:45 编辑

不是所有的东西调用一个函数就够了,有些效果需要几个函数合成,还有这边的习惯把你说的函数叫op即operation操作(不过我也喜欢叫函数,这无所谓),有些op你也会发现是可以由其他几个op合成出相同的效果,所以想东西不要太死。
像有些事情如吃饭开门在生活中由于司空见惯变成定势思维或者条件反射式行为所以我们逐渐对某些事情不再分部分解思考,但是这些“简单的司空见惯的事情”放入电脑程序里就不一样了,要根据提供的资料(比如你说的operation)进行分解。
比如你要问的指定单位攻击指定单位的问题:

一、如果攻击者和被攻击者都是一个特定的人(习惯上这边称之为agent),那你先找有没有比较直接一步到位的op(其实没有),然后就要分解这个“看似简单到不存在步骤”的事件,比如特定和指定就需要你先条件限制agent(活着-alive、什么队伍的-team、什么兵种类型-troop id、或绑定一个特征量-slot等等),然后考虑分解攻击这一行为本身,
(1)为什么agent会想攻击另一个agent:(所在阵营或分队的敌对,两个人本来关系不好-add agent relation值)
(2)周围都有你想杀的,为什么先杀某特定的:(系统默认攻击周围最近的敌人,所以是否需要提升较远目标“攻击优先性”的值-ai_set_aggressiveness
(3)近战还是远程打击,是否需要强制位移靠近敌人(script destination),(4)伤害判定是否有额外设定,这时你可能还需要看trigger或也可以不用。

此时总结一下:你会发现人打人本身利用了ai之间的关系产生自发ai行为的op,你并不一定需要直接操作攻击动画本身。具体你可以参考战团自带的酒鬼闹事和一些战场触发

二、要是你攻击的是指定场景物(prop instance),首先先确定“指定”是用什么条件去指定,然后结合operation和人打人的原理,你会发现这时agent 和 prop instance之间没有直接一蹴而就的op,也没有设定关系产生自发的ai行为。所以你要把打击本身进一步分解步骤,人打物其实就是强制人位移到物体周围的合适相对位置,播放打击动画,然后捕捉打击动画一个特定时刻产生伤害等判定(比如特定动画帧或百分比,结合武器骨骼坐标推算出的打击范围与打击面的交互时刻等等)

此时总结一下:没有现成的就对原事件进行细分再模拟,具体案例你可以参照战团自带的mission temple里面的训练场ai打靶,搜一下trp_tutorial_archer就找到了。



最后:
(1)我上面写英文的地方你查看有没有相关op,好好看一下英文版的注释(中文注释有些翻译的不怎么对)。

(2)你也可以以特定人打特定物的逻辑去作为方案实现特定人打特定人,但是既然有现成而又高效的机制就最优选择了。所以功能这个东西不要总想有现成的机制存在一步到位,但有有高效的现成的机制可以利用就用着权衡选最优方案。

评分

参与人数 1第纳尔 +50 互助 +1 收起 理由
幼稚园殺手 + 50 + 1 乐于助人!

查看全部评分

鲜花鸡蛋

stevenxxy008  在2020-2-22 02:47  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

5

主题

25

回帖

14

积分

随仆

Rank: 1

UID
3131813
第纳尔
98
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2020-1-29
鲜花(1) 鸡蛋(0)
 楼主| 发表于 2020-2-22 02:50:09 | 显示全部楼层
vegetto 发表于 2020-2-19 12:26
不是所有的东西调用一个函数就够了,有些效果需要几个函数合成,还有这边的习惯把你说的函数叫op即operatio ...

解释的很到位啊,大意就是要旁敲侧推,找别的路子去实现。
我再问一个问题,你上文提到的aggressiveness这个值起的什么作用啊。酒鬼闹事的确用了这个值,但是不太理解这个东西。

286

主题

2593

回帖

1219

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2343857
第纳尔
17647
精华
0
互助
69
荣誉
1
贡献
278
魅力
90
注册时间
2014-12-4

骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之奉献勋章骑士美德之仁慈勋章[杰出会员互助勋章]元老骑士勋章霸主正版勋章

鲜花(337) 鸡蛋(2)
发表于 2020-2-22 15:07:07 来自手机 | 显示全部楼层
stevenxxy008 发表于 2020-2-22 02:50
解释的很到位啊,大意就是要旁敲侧推,找别的路子去实现。
我再问一个问题,你上文提到的aggressiveness ...


aggressiveness是agent的攻击优先级的意思,目标agent的攻击优先级越高,agent越倾向于优先攻击这个目标agent。

评分

参与人数 1第纳尔 +10 互助 +1 收起 理由
幼稚园殺手 + 10 + 1 乐于助人!

查看全部评分

您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-6-14 22:53 , Processed in 0.116062 second(s), 24 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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