最近苦于思考怎么去加强AI
之前都是在代码里面根据各种情况去写代码
简单的逻辑还好说,复杂的情况实在是让人受不了
一大堆的这种业务逻辑代码自己都看晕了
后来想用行为树的方式去实现AI
找了几个行为树编辑器最后找到了这个:http://behavior3js.guineashots.com
还可以在线编辑,很符合我的需求
添加各种节点后导出json 然后我来解析.需要做的是实现你添加节点的方法
用一个Blackboard 传递属性给下一个节点,记录公共变量
--------------
具体点的用法说明:
这里面分为复合节点(顺序节点,选择节点), 条件节点,装饰节点,行为节点
我用起来的话这几个就够了
条件节点,装饰节点,行为节点 这几个是需要你去添加并且实现自己业务逻辑的
复合节点不需要变动了.
复合节点没什么逻辑.就是顺序调用子节点的返回结果(成功或者失败)
条件节点 这个也很简单.和行为节点有点相识,都是没有子节点的.然后用来做一些基础判断 返回(成功或者失败)
行为节点 也很简单,就是最终需要执行的操作.这里直接调用你原本的业务代码就行
装饰节点 的作用就是计算一些数值,然后这个数值存储到Blackboard 传递到下一个节点去
下一个节点可以利用上一个节点传递的值.
装饰节点不做判断逻辑. 这个交给条件节点.多个装饰节点串联起来最终进行简单的true false 或者数字比较判断
我在里面实现了个循环节点,有些操作是需要循环判断的,这里有点不同的是 一般用到循环节点,上个节点会传入 list. 这里会在循环的时候 把里面的元素传入到子节点里面去
解析代码:
@PostConstruct public void init() throws IOException, InstantiationException, IllegalAccessException { FileSystemResource f = new FileSystemResource("config/ai/ddz_ai.txt"); File file = f.getFile(); String str = FileUtils.readFileToString(file, "utf-8"); BehaviorTree tree = JSON.parseObject(str, BehaviorTree.class); JSONObject jsonObject = JSON.parseObject(str); initClass(); JSONObject array = jsonObject.getJSONObject("nodes"); for (Object j : array.values()) { JSONObject json = (JSONObject) j; String id = json.getString("id"); map.put(id, json); } rootNode = parse(jsonObject.getString("root")); } BaseNode rootNode; BaseNode parse(String root) throws InstantiationException, IllegalAccessException { JSONObject obj = map.get(root); String name = obj.getString("name"); Class clazz = clazzs.get(name); if (clazz == null) { logger.error("不存在节点:{}", name); } BaseNode node = JSON.toJavaObject(obj, clazz); if (node.getChild() != null && node instanceof Decorator) { Decorator decorator = (Decorator) node; decorator.setChildNode(parse(node.getChild())); } if (node.getChildren() != null && node instanceof Composite) { Composite composite = (Composite) node; List<BaseNode> list = new ArrayList<BaseNode>(); for (String nodeId : node.getChildren()) { list.add(parse(nodeId)); } // 按照y值 升序排序保证执行顺序 Collections.sort(list, new Comparator<BaseNode>() { @Override public int compare(BaseNode o1, BaseNode o2) { if (o1.getDisplay().getY() > o2.getDisplay().getY()) { return 1; } else if (o1.getDisplay().getY() < o2.getDisplay().getY()) { return -1; } return 0; } }); composite.setChildrenNodes(list); } node.setChild(null); node.setChildren(null); return node; } public void initClass() { add(new Priority()); add(new Sequence()); // add(new CallAction()); add(new NotCallAction()); add(new RobAction()); add(new NotRobAction()); add(new PlayCardAction()); add(new PassAction()); add(new FilterAction()); add(new SuccessAction()); // add(new EqualCondition()); add(new FalseCondition()); add(new GreaterCondition()); add(new LessCondition()); add(new TrueCondition()); add(new CompareCondition()); // add(new IsLordDecorator()); add(new BaseChooseCardDecorator()); add(new CanPlayCardDecorator()); add(new GetCardTypeDecorator()); add(new GetCardTypeNameDecorator()); add(new GetHandCardKindDecorator()); add(new GetCardValueDecorator()); add(new GetGameStatusDecorator()); add(new GetLordCardNumDecorator()); add(new GetNextHandCardNumDecorator()); add(new GetStartCardDecorator()); add(new GetStartCardDecorator()); add(new IfLessLordCardDecorator()); add(new IfMustPlayDecorator()); add(new IfSuppressedDecorator()); add(new LoopDecorator()); add(new SelfHandCardNumDecorator()); } public void add(BaseNode baseNode) { clazzs.put(baseNode.getName(), baseNode.getClass()); }
上传了 代码和脚本.可以看看怎么去编辑逻辑 让逻辑跑通
相关推荐
专为Unity3D打造的AI行为树,包括ai编辑器 相关的博客文章地址为: 行为树(Behavior Tree)具有如下的特性: 它只有4大类型的Node: 复合节点 装饰器节点 条件节点 动作节点 更多详情、使用方法,请下载后阅读...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、...基于Unity3D的小游戏源码(实现了对话、任务、背包、武器系统,可以存档读档,有简短的剧情,行为树控制角色AI)...
Behavior Designer 是专为每个人设计的行为树实现 - 程序员、艺术家、设计师。 Behavior Designer 提供具有强大的 API 的直观可视化编辑器,帮您轻松创建新任务。它还包含数百个任务,PlayMaker 集成和广泛的第三方...
基于Unity3D和行为树插件制作的AI足球小游戏源码.zip基于Unity3D和行为树插件制作的AI足球小游戏源码.zip基于Unity3D和行为树插件制作的AI足球小游戏源码.zip基于Unity3D和行为树插件制作的AI足球小游戏源码.zip基于...
Behavior Designer 是专为每个人设计的行为树实现 - 程序员、艺术家、设计师。 Behavior Designer 提供具有强大的 API 的直观可视化编辑器,帮您轻松创建新任务。它还包含数百个任务,PlayMaker 集成和广泛的第三方...
行为树、有限状态机的可视化编辑器和创建其他类型人工智能工具的基础。 AI 图形实现为可重用的可编写脚本的对象,同一个实例可以由多个 GameObjects 运行。 使用 Blackboard 变量在场景和行为树之间共享数据。 已...
行为树构造原理讲解,行为树知识规范,实现例程等
一种改进的非玩家角色行为树设计与实现,何赛,刘念,随着电脑游戏这种娱乐方式的逐渐发展,人工智能已经成为构建游戏交互内容的一种重要方式和技术,为了在游戏中构建具有足够说服力
基于Unity3D和行为树插件制作的AI足球小游戏源码+注释说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载...
Behavior-Tree, 在 C 中,行为树库 新闻 !我们的书名为"机器人和人工智能中的行为树"的书在这里可以供查阅: https://arxiv.org/abs/1709.00084 BT C 中的行为树库。我正在使用 Davide Facont
它们对于实现AI很有用。 如果您需要有关行为树的更多信息,请查看 , 不错的。 产品特点 需要的:序列,选择器,任务 扩展:装饰器 安装 如果使用npm: npm install behaviortree 或使用纱线: yarn add ...
见的游戏人工智能设计方式主要有:有限状态机和行为树。这些方法能够得到市场 的认可,原因是其设计出的游戏人工智能的行为完全可控,但是表现的灵活性不足。 因此,一种新的游戏人工智能应运而生,那就是使用机器学习...
实现了AI机器人自动巡逻,发现敌人互相通知并追赶攻击,受伤自动躲避,失去敌人恢复巡逻等简单AI。
LuaBT是一种可作为服务端AI实现的行为树方案,是NodeCanvas行为树的Lua实现,支持Unity编辑,运行时预览和前调试。 特性 NodeCanvas行为树的Lua实现(不支持状态机) 支持Unity编辑行为树,导出JSON文件 支持运行时...
前端项目-behaviortree,行为树的javascript实现。它们对实现人工智能很有用。对于浏览器和节点。
行为树框架 for Lua机缘巧合,近几年的工作一直有涉及到游戏AI这块,网上常见的行为树+黑板似乎不太能满足复杂策划需求,也不太可能让策划自己去配置这种行为树。因此,我对行为树的黑板进行了小改造,让行为树更像...
人工智能设计永远是游戏开发中最为热门的问题之一,比如A Star、有限状态机、行为树等都是开发者非常耳熟能详的名字。Unity也一直致力于为开发者创造优雅而便利的工具,为他们解放生产力,而AI领域也是其中极其重要...
一组用于在可视节点编辑器中统一设计AI的工具。... 使用新的复合节点Active Selector和Active Sequencer进行行为树检修。其他可能的变化AI行为的标准化版本。 基于实用程序的行为树。 一些样品。主要特点行为树