Rimworld Mod制作教程11 角色AI介绍JobGiver and ThinkNode

基础知识

游戏中的AI一般使用状态机或行为树来实现。状态机适用于简易的AI。Rimworld中使用的是行为树。
下面给个链接了解一下,有很多优秀教程我就不赘述了。
行为树介绍

源码分析

看了上面的链接之后相信你对行为树应该非常精通了。4种节点action(行为),composite(复合),conditional(条件),decorator(修饰符),那么,这颗树的数据在哪里呢?

在这个xml文本里,存放了人类的行为树,SubTree是则另一棵树,把某个系列的逻辑抽离出来复用。
在这里插入图片描述

ThinkNode

行为树的基类节点,一切AI的基础,可以看到主要负责中序遍历查找节点下的子节点,自身有个优先级用来控制挂在同一个父节点下的N个子节点的执行顺序。
在这里插入图片描述

行为节点JobGiver

JobGiver以及继承了JobGiver的节点,对应行为树中的action节点,是具体的行为节点。TryGiveJob是上一篇调用角色工作的api,不同的action节点最终会尝试给小人分配不同的工作。
在这里插入图片描述
再举一个下单的例子,比较简单,首先小人身上要有下蛋能力的组件,然后创建一个下蛋的工作分给小人。只要你给小人挂上下蛋组件,并且在小人的行为树里配置下蛋节点。。。那小人能下蛋也没什么稀奇的。
在这里插入图片描述

复合节点ThinkNode_Priority

ThinkNode_Priority是行为树中对应的composite类型节点。负责从子节点中按顺序找一个节点,和行为树中的sequence节点的功能比较相似。同样是composite类型节点的还有ThinkNode_Random,从子节点中随机选取节点。暂时没有在RW找到与Parallel并行节点相似功能的节点。大概小人被设定为不能同时执行两件事吧。
在这里插入图片描述

条件节点ThinkNode_Conditional

布尔值Satisfied就是是否满足条件的结果,内部有个布尔值invert控制了是否翻转,相当于做了修饰节点decorator中反转节点的效果。
在这里插入图片描述

其他节点

其他的节点基本派生自上述几个核心的节点,例如ThinkNode_ChancePerHour继承了ThinkNode_Priority,每个小时有概率从子节点中取出一个节点。时间冷却被记录在pawn的mindState中。
在这里插入图片描述

结语

大概原理就这样,有机会的话(有机会的话,当然也很有可能咕咕咕)再尝试写个简单的AI全流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值