从上古卷轴中形形色色的人物,到NBA2K中挥洒汗水的球员,从使命召唤中诡计多端的敌人,到刺客信条中栩栩如生的人群。游戏AI几乎存在于游戏中的每个角落,默默构建出一个令人神往的庞大游戏世界。 那么这些复杂的AI又是怎么实现的呢?下面就让我们来了解并亲手实现一下游戏AI基础架构之一的行为树。行为树简介行为树是一种树状的数据结构,树上的每一个节点都是一个行为。每次调用会从根节点开始遍历,通过检查行为的执
一、什么是游戏状态机游戏中状态机就是一个对象或者角色,有多种状态属性,多种状态下切换变化,比如走路,1段跳跃,2段跳跃,战斗,死亡这些状态。根据当前是什么状态下可以切换到什么状态,比如走路的时候我可以切换到1段跳跃。在1段跳跃下才能做2段跳。简单的有限状态机可以用枚举+switch的方式实现,用Switch语句来获取状态,并且通过特定的方法来设置状态。但我们可能要在项目的很多地方的调用这段Swit
转载
2024-08-23 10:13:13
387阅读
对游戏NPC的行为控制一般有2种,一种是状态机,一种是行为树。状态机:Unity对人物动画的控制是基于状态机的,如下图:可以看到,每个状态除了包含自身的状态行为外,还需要和其他的状态打交道,需要输入状态机之间切换的条件。因为这一点,导致增加状态会使得状态机越来越复杂。状态机是一种网状结构,耦合性很大。行为树: 图片源自:
1、行为树是将游戏NPC的行为(走动,攻击,跳跃)搭
转载
2024-03-25 18:42:04
131阅读
要让游戏里的AI角色能执行预设的逻辑,最直接的方法是依照行为逻辑直接编写代码,但是这种方法工作量大,也容易出错。我们也可以用有限状态机来实现行为逻辑,但是有限状态机难以模块化,编写代码麻烦且容易出错。相较而言,行为树层次清晰,易于模块化,并且可以利用通用的编辑器简化编程,简洁高效。在处理AI角色的行为逻辑时,有限状态机是一种简单易用的方法。但是,在处理规模较大的问题时,有限状态机很难复用、维护和调
转载
2024-05-30 22:10:01
166阅读
状态机FSM :具有有限数量的状态,任意时刻都处于有限状态集合中的某一状态。 当其有事件(event)或条件发生时,将从 当前状态(cur_state) 转换到 另一个状态(next_state) ,或者仍然保持在当前状态。State:状态,状态内执行一个或多个动作(action)Action:动作,执行具体事情,执行时机有Enter、Update、Exi
转载
2024-03-27 11:19:48
210阅读
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑。本系列文章以TypeScript为介绍语言。 本篇介绍有限状态机和行为树。有限状态机用于有限的状态下的AI,由于同时只能处于一个状态,多个状态需要多个有限状态机,一般用于简单的AI行为。行为树是基于固定行为,通过遍历树来决定采用哪种行为。行为的设计和执行采用解释器模式,由策划设计数据,程序解析执行,行为组合的灵活性高,比较适合剧情NPC。
转载
2024-05-05 15:14:10
216阅读
优点:模块化、分层组织、可重用代码、反应性、可读性、表达能力、适用于分析、适用于自动综合;
缺点:BT引擎应用复杂、检查所有的条件需要很大的代价、有时前馈执行效果足够好、BT与FSM不同、BT工具不成熟;
优点模块化BT的每个子树都可以是一个模块。模块化系统可以设计、应用、测试和重用一个模块。分而治之的模块化系统会随着系统的复杂度增加而变得更加有益。分层
1.行为树基础官方文档 行为树中常用的有三类,分别是decorator、sequence和selector。decorator下只执行一个节点,sequence下会按照从左到右的顺序执行多个节点,selector是从多个节点中选择一个执行。 如何为物体添加行为树呢?有两种方式,第一种是直接AddCompontent,第二种是选中目标物体后在行为树界面右键选择AddBehaviorTree。 行为树
转载
2024-03-27 09:42:28
419阅读
游戏人工智能AI中最常听见的就是这三个词拉
转载
2022-06-10 09:00:26
2297阅读
行为树和有限状态机(例如PlayMaker)分别在什么情况下来使用呢?在很牛逼的情况下,行为树用在制作AI上,有限状态机用在一些普通的可视项目中。当然你也可以反过来用,这东西看心情。有些人说有限状态机的年代要终结了,但是我们还是要低调。只能说在做AI上行为树比状态机更好些。
优势如下:更加的灵活,更强力,易于修改。
让我们看下第一个优势:灵活。用状
先看下效果:FSM ,有限状态机,一个可以枚举出有限个状态,并且这些状态在特定条件下是能够来回切换的。在游戏中经常看到的一些AI,如敌人巡逻,巡逻过程中看到玩家就追击,追上了就攻击,追不上并且有了一定的距离就返回去继续巡逻。Unity中的Animator就是一个FSM了,不过Animator是控制角色动画播放的,什么状态的时候播放什么动画。而这里写的FSM是控制角色AI的,什么状态就做什么事。FS
转载
2024-04-02 21:32:04
31阅读
行为树原理简介本篇博客整理总结自行为树(Behavior Tree)详细介绍。前言首先需要说明的是行为树和状态机都是实现游戏AI的一种手段,二者各有利弊。相对于行为树,经典状态机实现起来更简单,且执行效率更高,但是随着状态数量的增加,状态机的结构将会向着不可控的方向发展。而经典行为树则是使用起来结构更加清晰,对于复杂AI的开发效率更高,但是实现起来复杂,且执行效率较低。所以说二者各有千秋。不过现在
转载
2024-07-26 10:35:54
308阅读
Unity里关于动画状态机(Animator)的介绍,不足或错误请联系博主及时更改,谢谢。 状态机的状态(State) 每个Animator Controller都会自带三个状态:Any State, Entry和 Exit。 1、Any State状态 表示任意状态的特殊状态。 例如我们如果希望角
转载
2024-03-08 16:57:31
1388阅读
状态机与行为树BT1 简介1.1 需求1.2 行为树介绍 from wiki1.3 BT的发展简史与动机1.4 有限状态机的问题?反应性和模块化的必要性2 控制结构(control architectures)分类2.1 有限状态机(FSM)优点和缺点2.2 分层有限状态机(HFSM)优缺点2.3 包容性架构 Subsumption Architecture优缺点2.4 远程反应程序 Teleo
转载
2024-01-22 22:11:08
45阅读
或许广大程序员之前接触过游戏状态机,这已不是个新鲜的词汇了。其重要性我也不必多说了,但今天我要讲到的一个状态机框架或许您以前并未遇到过。所以,我觉得有必要将自己的心得分享一下。下面是一个链接:http://wiki.unity3d.com/index.php/Finite_State_Machine。 接下来我所要讲的就是基于此状态机框架。首先声明一下,这个状态机框架并不是我写的(我现在还没这个能
官方说明: 提供创建、使用和销毁有限状态机的功能,一些适用于有限状态机机制的游戏逻辑,使用此模块将是一个不错的选择。 有限状态机并不是游戏中独有的,我们看一下其他的介绍: 有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件工程,编译器、网络协议、和
转载
2024-05-11 16:01:51
118阅读
目录AI介绍 应用案例1. 问题【需求】 2. 分析: 3. 设计类图 4. 实现 AI介绍人工智能(Artificial Intelligence, AI)人工智能范围很大,分支很多,工业军事等机器人的人工智能这里讲的是在游戏中的人工智能大型游戏敌人的AI很多设计AI要注意:AI可能会有多套:尽可能复用相同的内容。一套AI可以调整:AI不要硬编码:调整但不改代码:配置AI--有限状态机---行为
转载
2024-05-10 20:42:28
13阅读
【前言】 本篇来说一下关于简单有限状态机的算法实现,当然我们的几个状态会比较简单,而且本身我也是处于入门状态,所以当成一个简单的知识积累。有限状态机,顾名思义,状态是有限个的,而且状态之间是关联的,本篇写的状态机,其实是类似写游戏里面的AI机器人,就是那些游戏里面的怪啊,npc啊,本篇也是针对几个行为或者是状态,进行设计,编写相关脚本。 1.新建·一个项目,再资源商店搜索Zombie,导入敌人的模
转载
2024-03-21 07:13:48
105阅读
Unity高级——状态机——有限状态机 一、状态机 状态机能够分离逻辑代码,提高代码的可维护性和重用性 本节课我们来学习,在Unity中使用状态机,来实现一些逻辑的划分,首先我们需要了解一下,为什么开发的时候使用状态机? 之前有过开发经验的朋友,可能会知道在应用开发中,最常用的一种框架就是MVC框架。 也就是视图模型控制器这个框架,但是我们在游戏开发中,会发现很难去应用MVC框架。 是因
转载
2024-04-09 01:45:46
30阅读
翻译了下Unity官方Wiki有限状态机的代码注释部分。出于学习目的,修改了部分注释和调试输出等内容,版权归原文所有,仅供大家学习使用。FSMSystem.csusing System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
转载
2024-05-14 14:24:35
12阅读