当前课程知识点:游戏程序设计 >  第十五章 《游戏人工智能》 >  15.2 人工智能在游戏中主要方法 上  >  15.2 人工智能在游戏中主要方法 上

返回《游戏程序设计》慕课在线视频课程列表

15.2 人工智能在游戏中主要方法 上 在线视频

下一节:15.3人工智能在游戏中主要方法 (下)

返回《游戏程序设计》慕课在线视频列表

15.2 人工智能在游戏中主要方法 上 课程教案、知识点、字幕

我叫林智超

前面潘老师已经介绍过了

潘老师开了一个很好的头啊

然后接下去呢

就跟大家一起分享

人工智能

在游戏制作当中的主要的方法

左边这一部分

是传统的那个人工智能的方法

就一个决策

一个导航

右边的是棋盘游戏AI 高阶的技巧

这个待会有下一位老师来给大家分享

那我们先来看一下决策

决策呢

其实传统的有分成三种

一个是有限状态机

还有一个是行为树

还有个是GOAP

其实一般也就是上面两种会用得更加普遍一点

GOAP也有 GOAP呢

就是你是基于目标的

它不是偏规则的决策方式

是属于目标导向的决策方法

也有那么一点点的不可控

在讲之前我们先播放一个视频吧

大家玩过这个游戏吗

知道这是哪个游戏吗

这是最新的一版奥德赛

大家平时玩游戏的时候有没有去想过

那个游戏里的AI是怎么做的呢

这是一个

主角去打一个狮子的一个视频

这个是一个比较典型的一个AI

当然有很多方法可以制作这个狮子的AI

这样我前面提到一个状态机

一个行为树都可以 我待会会

分别跟大家讲

这个相关的制作方法

所以大家先欣赏一下

你可以很

可以观察下这个AI的表现

它远距离的表现跟近距离的表现是不一样的

所以在针对这种AI制作方面

它是有很

很强烈的规则上面的区分

所以是基于规则的一些AI的制作

它也是比较传统

这个游戏是卖了一千万套

制作了三年

卖了一千万套

你看到近距离是会甩一个手

然后远距离会一个冲刺

我们仔细看这个

我这两句话总结

就是这个狮子的一个AI的一个大概的框架

很多四足的怪物

它们的AI就是这样结构这样来的

这是刺客信条

包括怪物猎人

还有很多其他的一些

只要四足怪

基本上都是向这一个方向

刺客信条应该已经是育碧的王牌IP了一个游戏

首先

我们来看一下用有限状态机

来分析下这个狮子的AI

那我们先看有限状态机的概念是什么

有限状态机顾名思义

就是拥有有限多个状态

然后状态之间

存在着一种转移

这样的一个数学模型叫有限状态机

那状态

代表了某个对象的某个形态

它可以是一种行为

也可以是一些属性

转移就是表明状态之间的变更

转移是通过一些条件来满足的

它有两个特性

一个是离散性

一个是有限性

离散性就是说

它首先是每个状态

每个状态之间是

每个状态是独立的

各自独立的

然后有限性是因为他状态不会无限多

那如果我们要用有限状态机来描述

前面那个狮子的AI

会是怎么样的一个情况呢

其实很一目了然啊

首先

怪物可能会在徘徊

徘徊之后呢

如果进入进程攻击的范围了

它就甩手攻击

那如果进入远程攻击范围呢

那就冲刺攻击

就这样很简单的一个模型啊

就可以表现出前面一个

怪物的AI的一个逻辑出来了

但是有限状态机真那么好用吗

用是蛮好用的

但是也有很多缺点

它会什么样子的缺点呢

但首先优点是肯定上手快速简单

计算开销小

它只要做个判断

相互转换就可以了

但是当状态过多的时候呢

因为存在一种可能性

每个状态和每个状态间都有连接的可能性

就会变得非常复杂

你看就像这样的一个状态

这样一个图就会难以维护对吧

那怎么解决这个问题呢

那我们有个分层的概念啊

就是

首先

我们把状态啊

现在有这种状态

冲刺寻敌甩手闲逛睡觉

不分层的话

就每个都有两两的一个关系要去进行分析

那如果分层了

会是什么样子呢

我们把冲刺寻敌甩手

作为一个大状态叫战斗状态

然后

休息也是一个大状态

里面可以有闲逛

睡觉

那么大状态

战斗跟休息之间的可以做一个转换

小状态呢

冲刺寻敌甩手相互做转换

那个闲逛跟睡觉之间做转换

那这样的一个分类呢

就可以把这样的一个混乱的结构呢

拆分的清楚

那这是有限状态机

来做前面那个狮子的AI的一个分析

那么还有什么别的方法呢

我们来看一下行为树

行为树呢

其实是一个

如果你们学过编程

这种你应该知道这是一棵树的结构

树的结构

首先这上面有叶子节点跟中间节点

这个就是叶子节点

这些叶子节点是

表明它的一个行为

而那些中间节点呢

就是它编译整棵树的一个逻辑

那我们一个个来分析啊

首先

每个节点都是有一个返回值

是success

Failure Running就表明这个这个节点啊

返回成功了还是失败了

还是在执行

Selector节点就是这个节点

它的编译的逻辑是什么呢

它首先是编译

下面一颗左子树

如果说

这样从左边的一棵子树如果是返回成功的话

它这里就直接返回成功了

它也不会再去继续编译下去

如果说是Sequence的话

它是怎么了

也是从左边开始

往右它的子树一个一个编译

但是它必须是全部编译成功

它才返回成功

如果当中有一个失败

它就直接返回失败

Selector如果说

左子树是返回失败了

它会继续访问右子树

如果右子树也是失败的话

那么它也是失败

那如果说右子树是成功的话

它也是成功

也就是说

Selector下面的子数有一个是成功

从左边到右边里有一个成功

那么它这个Selector也就是成功

所以

从刚才的那个狮子的AI

那我们可以去

用这一颗树的逻辑来去

进行分析 首先呢

它是进行发现玩家

如果发现玩家了呢

它就判断跟玩家的距离是近还是远

如果是近的话

那就甩手攻击远的话那就冲刺攻击

如果没有发现玩家

那就是闲逛

那么这样就是一个图的形式

来表现出整个

刚才的一个狮子的AI的结构

跟状态机还是有点区别的啊

那当然中间节点可能

不止这一个Sequence

也不只Selector

还有别的像代表循环的Until Fail

甚至是取反的

取反的一个那个中间节点Non

那你大家就可以发现行为树其实是一个

以图片形式的一个脚本逻辑

好 行为树

有什么优劣呢

首先它

逻辑结构非常清晰

就是其实你看图啊

你一看就知道

这个逻辑的规则的那个遍历

是什么样的规则

行为跟数据逻辑分离就很好做

而且它每一个那个

叶子节点作为那个

作为表现的叶子节点

它可以到处使用

而且并且是可视化的 但是呢

它的缺点在于呢

它的遍历开销特别大

它树也依然可能很复杂

然后过于抽象

因为他是一个小本形式过于抽象

那节点的颗粒度比较小

那针对这样一个劣势呢

我们怎么做

去改变这样的一个

改进行为树的一种方法

我们再来看

看这棵简单的行为树

首先

它是否看到玩家 看到玩家的话就打

如果没有看到玩家的话

看它自己是不是困了

困了的话就睡觉

如果又没看到玩家用又不困

那就是继续闲逛

就这样一个很简单的一个逻辑

我前面说过

每个节点都有返回值

是success Failure Running

我们假设

三号节点

是返回成功的话

三号节点返回成功的话

那么根据Selector的属性

因为它要判断下一个节点

所以说三号节点返回成功的话

它必然是执行四号节点

对吧

我们在看下六号节点

六号节点返回成功的话

根据Selector的属性

它必须要执行七号节点

这是根据Selector的属性来决定的

它不会跳开

去执行别的命令没有可能

所以有没有可能就是说

当前节点

返回成功

那我下一个运行的节点是不是固定的

其实每一个都可以分析出来

其实就是固定的

你看三号节点返回成功

它去执行四号节点

所以说固定时用四号

六号成功执行七号节点

那假如八号节点执行成功

那代表Selector这个执行成功

那么它遍历从头开始执行三号节点

对吧

所以说每一个节点

返回成功

后继的节点执行是固定的

那么这是一个Success的情况

那么

如果说节点执行失败是不是也是一样呢

我们来看一下

假设三号节点执行

失败了

那么根据Selector

又执行到六号线

就是说三号几点执行失败的话

是执行六号节点

然后

如果六号节点执行失败呢

那这里Sequence就执行失败了

根据Selector的属性

我要去遍历这个八号节点

六号节点失败执行八号节点

也就是说

当当前节点执行失败

它后继执行什么节点也是固定的

对吧

所以

那么整体来分析呢

也就说

我们可以得出

针对成功或者失败

能出两个序列

游戏程序设计课程列表:

第一章 《游戏开发导论》

-1. 1什么是游戏(上)

--1.1 什么是游戏(上)

--选择题

-1.2 什么是游戏(下)

--1.2 什么是游戏(下)

--选择题

-1.3 游戏是如何开发出来的

--1.3 游戏是如何开发出来的

-1.4 游戏引擎(上)

--1.4 游戏引擎(上)

-1.5 游戏引擎(下)

--1.5 游戏引擎(下)

--单选题

-1.6 如何成为一个游戏开发者

--1.6 如何成为一个游戏开发者

--多选题

第二章 《游戏服务器概述 》

-2.1 什么是游戏服务器

--2.1 什么是游戏服务器

--单选题

-2.2 游戏服务器的和分类发展

--2.2 游戏服务器的和分类发展

--单选题

-2.3 核心技术和实现难点

--2.3 核心技术和实现难点

--单选题

-2.4 设计原理与方法论

--2.4 设计原理与方法论

--单选题

第三章 《《三维几何学基础》 》

-3.1 三维坐标系统

--3.1 三维坐标系统

--多选题

-3.2 向量与运算

--3.2 向量与运算

--单选题

-3.3 矩阵与线性变换

--3.3 矩阵与线性变换

--双选题

-3.4 四元数

--3.4 四元数

--多选题

第四章 《游戏循环及实时模拟》

-4.1 游戏循环概述(上)

--4.1 游戏循环概述(上)

--多选题

-4.2 游戏循环概述(下)

--4.2 游戏循环概述(下)

--单选题

-4.3 《无尽之路》的实现

--4.3 《无尽之路》的实现

--单选题

-4.4 支撑游戏的功能

--4.4 支撑游戏的功能

--选择题

-4.5 支撑游戏的机制与系统

--4.5 支撑游戏的机制与系统

--多选题

第五章 《随机数在游戏中的应用》

-5.1 基本介绍

--5.1 基本介绍

--单选题

-5.2 随机数生成器

--5.2 随机数生成器

--单选题

-5.3 随机数分布与应用

--5.3 随机数分布与应用

--单选题

第六章 《游戏性系统》

-6.1 什么是游戏玩法开发

--6.1 什么是游戏玩法开发

--单选题

-6.2 建立愿景 Vision

--6.2 建立愿景 Vision

--单选题

-6.3 划定边界 Scope

--6.3 划定边界 Scope

-6.4 迭代 Iteration

--6.4 迭代 Iteration

--单选题

-6.5 迭代 Iteration+抛光Polish

--6.5 迭代 Iteration+抛光Polish

--单选题

第七章 《实时图形渲染管道》

-7.1实时图形渲染管道 宏观渲染系统

--7.1实时图形渲染管道 宏观渲染系统

--单选题

-7.2实时图形渲染管道 应用阶段

--7.2实时图形渲染管道 应用阶段

--单选题

-7.3实时图形渲染管道 几何阶段

--7.3实时图形渲染管道 几何阶段

--单选题

-7.4实时图形渲染管道 光栅化阶段

--7.4实时图形渲染管道 光栅化阶段

--单选题

-7.5实时图形渲染管道 总结 参考

--7.5实时图形渲染管道 总结 参考

第八章 《材质着色与光照》

-8.1 物理回顾1

--8.1 物理回顾1

--单选题

-8.2 物理回顾2

--8.2 物理回顾2

--单选题

-8.3 材质 1

--8.3 材质 1

-8.4 材质 2

--8.4 材质 2

-8.5 材质3

--8.5 材质3

-8.6局部光照

--8.6局部光照

--单选题

-8.7 全局光照

--8.7 全局光照

--单选题

第九章 《游戏动画》

-9.1 动画介绍

--9.1 动画介绍

--多选题

-9.2 游戏动画介绍

--9.2 游戏动画介绍

-9.3 动画技术类型

--9.3 动画技术类型

--多选题

-9.4 骨骼蒙皮动画

--9.4 骨骼蒙皮动画

--多选题

-9.5 动画流水线

--9.5 动画流水线

--多选题

-9.6 动画前沿趋势

--9.6 动画前沿趋势

--多选题

第十章 《网络同步技术》

-10.1 .基本概念

--10.1 .基本概念

--多选题

-10.2 设计目标

--10.2 设计目标

--多选题

-10.3 传输数据分析

--10.3 传输数据分析

--多选题

-10.4 常用同步方案 1

--10.4 常用同步方案 1

-10.4 常用同步方案 2

--10.4 常用同步方案 2

-10.4 常用同步方案 3

--10.4 常用同步方案 3

-10.4 常用同步方案 4

--10.4 常用同步方案 4

--多选题

-10.5 方案对比

--10.5 方案对比

--多选题

第十一章 《游戏常用几何学》

-11.1 基本图元

--11.1 基本图元

--单选题

-11.2 图元距离(上)

--11.2 图元距离(上)

--单选题

-11.2 图元距离(下)

--11.2 图元距离(下)

--单选题

-11.3 图元相交测试+ 其他几何方法

--11.3 图元相交测试+ 其他几何方法

--单选题

第十二章 《游戏物理模拟》

-12.1 著名物理引擎介绍

--12.1 著名物理引擎介绍

--单选题

-12.2 物理引擎原理(上)

--12.2 物理引擎原理(上)

--单选题

-12.3 物理引擎原理(下)

--12.3 物理引擎原理(下)

--单选题

-12.4 游戏中的物理体

--12.4 游戏中的物理体

--单选题

-12.5 物理引擎使用入门

--12.5 物理引擎使用入门

--单选题

第十三章 《开发工具 》

-13.1开发语言

--13.1开发语言

--单选题

-13.2 开发环境

--13.2 开发环境

--单选题

-13.3 腾讯开发组件介绍

--13.3 腾讯开发组件介绍

--单选题

-13.4 网络通信+业务框架介绍

--13.4 网络通信+业务框架介绍

--多选题

第十四章 《分布式系统设计 》

-14.1 进程间通信(上)

--14.1 进程间通信(上)

-14.2 进程间通信(下)

--14.2 进程间通信(下)

-14.3 通信格式

--14.3 通信格式

-14.4 并发模型

--14.4 并发模型

-14.5 超时处理

--14.5 超时处理

-14.6 大系统小做(上)

--14.6 大系统小做(上)

--多选题

-14.7 大系统小做(下)

--14.7 大系统小做(下)

-14.8 架构层面的技术支持(上)

--14.8 架构层面的技术支持(上)

--单选题

-14.9 架构层面的技术支持(下)

--14.9 架构层面的技术支持(下)

-14.10 分布系统的关键能力

--14.10 分布系统的关键能力

--多选题

第十五章 《游戏人工智能》

-15.1 游戏人工智能综述

--15.1 游戏人工智能综述

-15.2 人工智能在游戏中主要方法 上

--15.2 人工智能在游戏中主要方法 上

--多选题

-15.3人工智能在游戏中主要方法 (下)

--15.3人工智能在游戏中主要方法 (下)

-15.4 人工智能在游戏制作中的应用领域1

--15.4 人工智能在游戏制作中的应用领域1

--多选题

-15.5 人工智能在游戏制作中的应用领域2

--15.5 人工智能在游戏制作中的应用领域2

-15.6 人工智能在游戏制作中的应用领域3

--15.6 人工智能在游戏制作中的应用领域3

--多选题

-15.7 人工智能在游戏运营中的应用实践(上)

--15.7 人工智能在游戏运营中的应用实践(上)

-15.8 人工智能在游戏运营中的应用实践(下)

--15.8 人工智能在游戏运营中的应用实践(下)

--多选题

第十六章 《游戏支撑系统 》

-16.1 游戏支撑系统(1)

--16.1 游戏支撑系统(1)

--单选题

-16.2 游戏支撑系统(2)

--16.2 游戏支撑系统(2)

--单选题

-16.3 游戏支撑系统(3)

--16.3 游戏支撑系统(3)

--单选题

-16.4 游戏支撑系统(4)

--16.4 游戏支撑系统(4)

--单选题

-16.5 游戏支撑系统(5)

--16.5 游戏支撑系统(5)

第十七章 《游戏逻辑服务器和反外挂》

-17.1 游戏逻辑服务器(上)

--17.1 游戏逻辑服务器(上)

--单选题

-17.1 游戏逻辑服务器(下)

--17.1 游戏逻辑服务器(下)

-17.2 外挂与反外挂(上)

--17.2 外挂与反外挂(上)

-17.2 外挂与反外挂(下)

--17.2 外挂与反外挂(下)

--多选题

第十八章 《运行环境和运维 》

-18.1运行环境

--18.1运行环境

--多选题

-18.2物理部署

--18.2物理部署

--多选题

-18.3系统的可运维性

--18.3系统的可运维性

--多选题

-18.4运维案列分析

--18.4运维案列分析

--多选题

15.2 人工智能在游戏中主要方法 上 笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。